0

X ボタンをクリックしてプログラム (MYAPP など) を閉じると、次のようなダイアログが表示されました。

MYAPP が機能しなくなった

Windows はオンラインで問題の解決策を確認できます。」

しかし、実際にはアプリケーションはすでに終了していました。

エラー情報:

    Problem signature:
      Problem Event Name:   APPCRASH
      Application Name: MYAPP.EXE
      Application Version:  1.0.0.0
      Application Timestamp:    56a8dfa8
      Fault Module Name:    MSVCP90D.dll
      Fault Module Version: 9.0.30729.6161
      Fault Module Timestamp:   4dace5bf
      Exception Code:   c0000005
      Exception Offset: 00007b3f
      OS Version:   6.3.9600.2.0.0.272.7
      Locale ID:    3081

Windows は、プログラムが「動作を停止」したかどうかをどのように検出しますか? アプリケーションが例外またはデッドロックをスローしたことを示していますか?

4

1 に答える 1

1

Windows エラー報告 (WER) は、未処理の例外をキャッチします。デッドロックをキャッチしません。プログラムが「動作を停止」したときにポップアップするダイアログ ボックスは、WER クラッシュ ダンプが取得されていることです (または、クラッシュ ダンプを取得する必要があるかどうかを確認するために MS サーバーと通信しています)。

クラッシュしているプログラムをデバッグする方法はいくつかありますが、それらは実証済みです (困難ではありますが)。これらのいくつかは次のとおりです。

  • GFlags を使用して Visual Studio または WinDbg を起動する
  • デバッガーを起動するコードをプログラムに含める

この場合、WER を使用すると、ローカル クラッシュ ダンプを有効にして、シンボル データベース (pdb) ファイルがあれば、ローカル クラッシュ ダンプからデバッグできます。ローカル クラッシュ ダンプの取得について詳しくは、「ユーザー モード ダンプの収集」を参照してください。

于 2016-02-09T16:39:52.307 に答える