如何在托管应用程序的框架代码中调试System.ExecutionEngineException

时间:2013-08-28 13:11:33

标签: .net visual-studio-2010 debugging unmanaged crash-dumps

我有一个作为服务运行的应用程序。应用程序不时崩溃。该应用程序是在vb.net中编写的,并在新线程(一次一个)上运行其任务。我收集了故障转储并开始分析。通过分析应用程序创建的日志文件(转储分析支持它),似乎在没有任务正在运行且应用程序正在等待下一个System.Timers.Timer事件时发生崩溃。

首先我将.dmp文件加载到VS2010:

Process Architecture:   x86
Exception Code: 0xC0000005
Exception Information:  The thread tried to read from or write to a virtual address for which it does not have the appropriate access.
Heap Information:   Present

当我开始'混合调试'时,我有

An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.

在网上搜索更多信息时,我发现cdb.exe可以提供更多信息。 这是!analyze -v

的结果(希望不会太多)
FAULTING_IP:
clr!GCPreempNoDtor::Enter+23
73532ac0 c7410800000000  mov     dword ptr [ecx+8],0    
EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 73532ac0 (clr!GCPreempNoDtor::Enter+0x00000023)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000001
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 764a125a
Attempt to write to address 764a125a

...

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

MANAGED_STACK: !dumpstack -EE给出空结果。

STACK_TEXT:
0570f1b8 73635252 00000001 25d0418f 00070007 clr!GCPreempNoDtor::Enter+0x23
0570f1fc 73625e51 25d0424f 7359f550 00000000 clr!DestroyThread+0x82
0570f264 735ca0cf 00000000 00020000 0570f290 clr!ThreadpoolMgr::WorkerThreadStart+0x5b2
0570ff08 764a33aa 072cab38 0570ff54 77379ef2 clr!Thread::intermediateThreadProc+0x4d
0570ff14 77379ef2 072cab38 40118862 00000000 kernel32!BaseThreadInitThunk+0xe
0570ff54 77379ec5 735ca086 072cab38 ffffffff ntdll!__RtlUserThreadStart+0x70
0570ff6c 00000000 735ca086 072cab38 00000000 ntdll!_RtlUserThreadStart+0x1b

由此我得出结论,崩溃是由CLR调用的进程(垃圾收集?)引起的,但我没有看到与托管代码的任何连接以及接下来要查找的内容。

0 个答案:

没有答案