まず、私が知っているクラッシュの種類について説明します。実際の質問については、下にスクロールしてください。Windows によって処理されるクラッシュのみに関心があることに注意してください。特定のアプリケーションやフレームワークには独自のクラッシュ ハンドラ (Cygwin、VCL、Java、.NET など) がある場合がありますが、これについては説明しません。
ワトソン博士
Windows XP では、アクセス違反などの未処理の「構造化例外」のほとんどが、Microsoft アプリケーション エラー報告ダイアログを生成します (後に「Windows エラー報告」に名前が変更されましたが、実行可能ファイルは「ワトソン博士dwwin.exe
」と呼びます)。
で簡単に再現できます*(char*)0=0;
FatalAppExit
呼び出すFatalAppExit()
と、メッセージ ボックスとイベント ログのエントリが生成されますが、ワトソン博士は生成されません。
スタックオーバーフロー
Windows XP では、スタック オーバーフローが発生すると、プロセスは何の通知もなく突然終了します。(Vista以降は修正されていると思います)
で再現できますmain(){main();}
私の質問は、これらのいずれかを引き起こす原因は何ですか:
このダイアログは が所有してcsrss.exe
おり、私が確認した時点でAcroRd32.exe
プロセスは終了しています。
また、システム イベント ログにエントリを書き込みます (ワトソン博士のクラッシュでは行われません)。
MessageBox を次のように呼び出すことで、ダイアログとイベント ログ エントリを再現できます (ただし、実際のクラッシュではないことは明らかです)。
MessageBox(
0,
"The exception unknown software exception (0xc0000409) occurred in the application at location 0x00404def.",
"AcroRd32.exe - Application Error",
MB_ICONSTOP | MB_SERVICE_NOTIFICATION);
私は、Adobe Reader をサービスとして実行することを除外しました。バージョン 11.0.08 です。PDF ファイルが選択された Windows エクスプローラー ウィンドウがアクティブ ウィンドウになると、クラッシュが散発的に発生するようです。
もちろん、Adobe Reader のトラブルシューティングをお願いしているわけではありません。「アプリケーション エラー」/「アプリケーション ポップアップ」タイプのクラッシュを生成する方法を教えてください。