1

我有一个完全用 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 设备的一个问题,他们关于这个问题的任何更新我都会在这里更新。

任何帮助将非常感激。

4

1 回答 1

4

经过数小时的调试问题后,我相信我已经设法复制了该问题,从而确定了我的应用程序中的原因。

我有一个 TitleBar 控件,它位于每个表单的顶部,它显示了当前的表单标题、电池状态以及当前与我们的服务器同步的状态。

该控件订阅我们的同步引擎公开的事件以获取最新状态。引发此事件时,我们使用图标更新控件以显示其进度。

我遵循有关跨线程访问的所有规则,并确保控件仅使用 UI 线程进行操作,但似乎如果我们不断获得状态更改,则内部会导致 AccessViolation。

如果我使用 Timer 并每隔几秒钟更新一次控件,而不是在状态发生变化时,问题就会消失,我们不再会随机退出进程。

上面堆栈跟踪的关键部分比其他任何事情都更有帮助,因为 netcfagl3_5 是 Windows 窗体本机 dll,因此难题的各个部分似乎都融合在一起了。

于 2013-01-26T00:14:15.603 回答