.NET Compact Framework 3.5应用程序中的随机本机异常

时间:2013-01-25 09:07:44

标签: c# windows-mobile compact-framework

我在.NET 3.5紧凑框架上有一个完全用C#编写的应用程序,它似乎在随机时刻出现本机异常崩溃。我的应用程序永远不会记录它退出的任何这些异常。有时我的应用程序可以运行几个小时,或者你可以启动它,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设备的问题,以及他们对这个问题的任何更新,我将在这里更新。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:4)

经过几个小时的调试后,我相信我已经设法复制了这个问题,从而确定了我的申请中的原因。

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

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

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

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

上面的堆栈跟踪的关键部分帮助最重要的是netcfagl3_5是一个Windows Forms本机dll,所以这个难题的所有部分似乎都在一起。

相关问题