从.NET Compact Framework的3.5应用程序随机机异常(Random native

2019-10-17 15:46发布

我在C#编写的完全基于.NET 3.5框架紧凑,似乎在与本地例外随机时刻被崩溃的应用程序。 我的应用程序从未记录这些例外,它只是退出的。 有时候,我的应用程序可以运行数小时,或者你可以启动它,5分钟后,它会崩溃!

我一直保存了在某些时候产生的转储文件,但难以理解的问题是什么,因为我缺乏的是抛出的DLL(netcfagl3_5.dll)调试符号。 该错误是访问冲突,但尝试读取输出的WinDbg已经离开我泄气:

FAULTING_IP: 
netcfagl3_5_7b37d000+152b4
7b3922b4 043092e5 ldr         r3,[r2,#4]

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7b3922b4 (netcfagl3_5_7b37d000+0x000152b4)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: ffffffd4
Attempt to read from address ffffffd4

FAULTING_THREAD:  890fa60a

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.

EXCEPTION_PARAMETER1:  00000000

EXCEPTION_PARAMETER2:  ffffffd4

READ_ADDRESS:  ffffffd4 

FOLLOWUP_IP: 
netcfagl3_5_7b37d000+152b4
7b3922b4 043092e5 ldr         r3,[r2,#4]

APP:  nk.exe

BUGCHECK_STR:  APPLICATION_FAULT_INVALID_POINTER_READ_ZEROED_STACK

PRIMARY_PROBLEM_CLASS:  INVALID_POINTER_READ

DEFAULT_BUCKET_ID:  INVALID_POINTER_READ

LAST_CONTROL_TRANSFER:  from 7b394094 to 7b3922b4

STACK_TEXT:  
2546ec78 7b394094 : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x152b4
2546ec84 2551cc4c : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x17094
2546ec90 7b385280 : 01d5ebec 890fa60a ffffffd0 ffffffd0 : 0x2551cc4c
2546ec9c 7b38536c : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x8280
2546ece8 7b38eb2c : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x836c
2546ed20 7b38ed84 : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x11b2c
2546ed5c 7b38f0c4 : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x11d84
2546eda4 00000000 : 01d5ebec 890fa60a ffffffd0 ffffffd0 : netcfagl3_5_7b37d000+0x120c4

我在这里有4个转储文件https://www.dropbox.com/s/9g6zjbxh4ghv5v3/DumpFiles.zip但我可以得到更多。

作为一个侧面的问题,我曾尝试在网上淘,找出其中调试符号是有限的成功netcfagl3_5.dll所以如果有任何人知道在那里他们可以发现,将是巨大的。

我追摩托罗拉具体这似乎是更多地与ES400设备,并从他们关于这个问题,我会在这里更新任何更新的问题。

任何帮助将非常感激。

Answer 1:

几个小时的调试,我相信我已成功地复制了问题从而找出我的应用程序导致出现该问题后。

我有一个被放置在各种形式的顶部一个标题栏的控制,这显示当前表单的标题,与我们的服务器目前同步的电池状态和地位。

控制订阅了一个事件我们的同步引擎暴露,以获得最新的状态。 当这个事件引发我们更新,以显示其进度图标控制。

我遵守所有有关跨线程访问,并确保控制只使用UI线程操作的规则,但似乎如果我们不断地得到状态改变的东西在内部引起AccessViolation。

如果我使用一个定时器和更新控制每隔几秒钟,而不是当状态发生了变化问题消失,我们不再得到随机的进程退出。

上面说的堆栈跟踪的重要组成部分有助于看得比什么都重要的是netcfagl3_5是Windows窗体本地的dll所以拼图位似乎都走到一起的事实。



文章来源: Random native exception from .NET Compact Framework 3.5 application