8

インストール時に .NET マネージド アプリケーションで ngen が実行され、アプリの Windows エラー報告からクラッシュ ダンプが取得された場合、それを使用してスタック トレースや変数などを確認するにはどうすればよいでしょうか?

質問に関連する背景を次に示します。インストール時に生成される .NET アプリがあります。未処理の .NET 例外が原因でクラッシュした場合、クラッシュは Windows エラー報告に分類され、そこから winqual.microsoft.com から minidump.mdmp ファイルをダウンロードできました。

クラッシュしたアプリのビルド用の .dbg ファイルを含むフォルダーに minidump.mdmp を配置し、minidump.mdmp をダブルクリックして、VS2008 SP1 の新しいインスタンスで開きました。私のスタック トレースは次のようになります。

kernel32.dll!RaiseException() + 0x3d バイト
mscorwks.dll!RaiseTheExceptionInternalOnly() + 0x295 バイト
mscorwks.dll!JIT_Throw() + 0x130 バイト
MyApp.ni.exe!000007feee74c84c()
[以下のフレームは正しくないか、欠落している可能性があります。 MyApp.ni.exe のシンボルがロードされていません]
0000000070000d5e()
MyApp.ni.exe!000007feee611000()
000000000300bf78()
000000000300bf60()

[モジュール] ウィンドウには、OS および .NET DLL のシンボルが読み込まれていることが示されますが、アプリケーション モジュールの場合は次のようになります。

MyApp.exe -> シンボル ファイルにネイティブ シンボルがありません。
MyApp.ni.exe -> 一致するバイナリが見つかりません。
MyAppsLibrary.ni.dll -> 一致するバイナリが見つかりません。

4

5 に答える 5

3

これらのダンプをデバッグする最も簡単な方法は、Windows デバッガー (Windbg、cdb、または ntsd) を使用し、SOS デバッガー拡張機能をロードすることです (詳細については、SOS を検索できます)。

私が覚えている限りでは、元の EXE とシンボルがある限り、NGEN 化された部分は SOS にとって重要ではありません (それはあなたのアプリなので、NGEN 化されていない exe とシンボルがあると思います) )。

于 2009-12-14T01:11:53.723 に答える
1

「Windows 用デバッグ ツール」(具体的には WinDBG) では、マネージド アプリのサポートが制限されています。PDB が提供されると、ソース行参照を含むコール スタックを表示できるはずです。変数の値を表示するには、SOS プラグインを使用する必要があります。これは、コール スタック ウィンドウを開くよりも困難です。

于 2009-12-05T09:47:21.410 に答える
0

これはマネージド コードであるため、_NT_EXECUTABLE_IMAGE_PATH 環境変数を設定して、実行可能ファイルが存在するフォルダーを指すようにする必要がある場合があります。この場合、アセンブリを指す NativeImage キャッシュ内のフォルダーを見つける必要があります。デバッガーは、アセンブリを読み込むためにイメージを必要とします。

于 2009-12-08T20:35:03.960 に答える