4

.NET から MiniDumpWriteDump を呼び出してミニダンプを生成しましたが、正常に動作します。ただし、結果のダンプを VS 2010 にロードすると、有用な情報が表示されません。具体的には、コール スタックウィンドウは次のようになります。

コール スタック

マネージ コードの例外ハンドラーでダンプを書いていますが、マネージ フレームは含まれていません。また、私のexeにあるフレームは含まれていません。

なぜこれが起こるのか分かりますか?

ところで、VS デバッガーから手動でダンプを作成すると、期待どおりにマネージド フレームがダンプに含まれます

編集:

これに関するMicrosoft Connect の問題を見つけました。それは言います:

現在、CLR は、独自のダンプを取得するマネージド プロセスをサポートしていません。

それがまだ本当かどうか知っている人はいますか?

4

3 に答える 3

2

私は自分の間違いを見つけました。間違ったスレッドの呼び出しスタックを見ていました(複数のスレッドが実行されていることに気づいていませんでした)。これで、マネージドコールスタックが正常に表示されます。

于 2011-09-09T14:30:38.770 に答える
0

私は自分のアプリケーションで同様のことをします(つまり、MiniDumpWriteDumpを呼び出してから、デバッガーでダンプを調査します)。

私がこの問題を抱えているときはいつでも、2つの考えられる原因があります:

  • シンボル情報が欠落しています
  • または、ダンプ時にプロセスによって使用されていたDLLまたはEXEが欠落しています

最初の原因は簡単に解決できます。VS2010では、コールスタックまたは[モジュール]ウィンドウでDLLを右クリックし、[Microsoftサーバーからシンボルを読み込む]を選択するだけです。

2番目の原因は解決がより困難です。DLLまたはEXEが欠落している場合、デバッガーはそれをデバッグすることを拒否し、シンボルを確認することさえ拒否します。秘訣は、DMPファイルからダミーのDLL/EXEを生成することです。ユーティリティMODULERESCUEについては、http: //www.debuginfo.com/tools/modulerescue.htmlを参照してください。このユーティリティは、特定のDMPファイルに対してダミーのDLLとEXEを生成できます。これは、デバッガーがシンボルを再度ロードするのに十分なものです。

于 2011-09-09T14:21:39.637 に答える
0

MiniDumpWriteDump は、VB.NET ではサポートされているが C# ではサポートされていない例外フィルターから呼び出す必要があることに注意してください。

これらのリンクを見てください:

例外がスローされたときに適切なダンプを取得する

C# での例外からのミニダンプの書き込み

于 2011-09-09T15:00:22.690 に答える