私は常に、自分自身がダンプをキャプチャするのに十分な経験を積んでいると考えていましたが、これには本当に混乱しました。定期的にクラッシュする .net プロセスがあります...何がクラッシュしているのか、ネイティブ コードまたはマネージ コードでクラッシュしているのか、それともプロセス自体で例外が発生しているのか、サード パーティの DLL であるのかさえわかりません。私が知っているのは、それがクラッシュしているということだけです。procdump を使用してクラッシュのダンプを取得しようとしていますが、非常に苦労しています。次のようにprocdumpをセットアップします。
procdump プロセス名.exe -ma -e
問題は、これを実行してから数分以内に、プロセスが実際にクラッシュしなかったにもかかわらず、procdump がダンプを生成して終了することです。-g を追加しても、同じ結果が得られます。数分後、procdump はダンプを生成して終了します。再起動しても、同じことが起こります。生成されたダンプのいくつかを開いたところ、ネイティブの例外コンテキストがありません。そこで、マネージ スレッドのマネージ コールスタックをすべてダンプしたところ、(これまでに確認したすべてのダンプで) 次のコールスタックに似たものが見つかりました。
System.Threading.WaitHandle.WaitAny
System.Runtime.IOThreadTimer+TimerManager.OnWaitCallback
System.Runtime.IOThreadScheduler+ScheduledOverlapped.IOCallback
System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame
System.Threading._IOCompletionCallback.PerformIOCompletionCallback
このハンドルされていない例外が、procdump がダンプ ファイルを生成する原因になっていると思います。少し検索したところ、UnhandledExceptionEventHandler オブジェクトが見つかりました。したがって、未処理の例外をキャプチャするには、プロセスに何かが必要であると思います。それとも、これは単なる標準的な SEH のものですか?
いずれにせよ、私はこれらの未処理の例外をあまり気にしません。クラッシュの原因となっている例外だけを気にします。致命的な例外でのみダンプを作成するように procdump に指示できる方法はありますか? これは例外をキャッチせず、プロセスが正常に終了したときにダンプするだけなので、 -t は機能しないと思います。DebugDiag のような別のものに移動する唯一のオプションはありますか?
事前にアドバイスをありがとう