サービスとして実行されているアプリケーションがあります。アプリケーションが時々クラッシュします。アプリケーションは vb.net で作成され、そのタスクを新しいスレッド (一度に 1 つ) で実行します。クラッシュ ダンプを収集し、分析を開始しました。アプリケーションによって作成されたログ ファイルの分析 (ダンプの分析がサポート) から、タスクが実行されておらず、アプリケーションが次の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.
Webで詳細情報を検索すると、より多くの情報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 によって呼び出されたプロセス (ガベージ コレクション?) であると結論付けましたが、マネージ コードとの関連性は見られず、次に何を探すべきかわかりません。