Windows .dmpまたは.minidmpが提供されたときに使用するモジュール/デバッグシンボルをどのように識別(およびアクセス)しますか
質問
ランダムな顧客からダンプファイルを受け取り、デバッグセッションを実行してクラッシュを確認しましたが、MSまたは他のサードパーティのライブラリにあることがよくあります。次の問題は、実際に使用可能なモジュールがあることを確認できる程度まで、PCセットアップの知識がない場合があることです。
たとえば、現在、ntdll.dll(5.01.2600.5512)のシンボルをロードしようとしています。 MSVC 2005では、モジュールリストウィンドウのパス列に完全パスのファイル名の前に*が表示され、XP / SP1 / SP1a / SP2 / SP3用にダウンロードしたシンボルのロードが拒否されます。
インターネットからダウンロードしてローカルキャッシュに保存するためのシンボルサーバーのセットアップがあります。これは、PCにあるモジュールで正常に動作しているようです。 メソッドと同等のGUIを使用する
Set _NT_SYMBOL_PATH=srv*d:\SymbolCache*\\server1\Third-Party-PDB;srv*d:\SymbolCache*\\server2\Windows\Symbols*http://msdl.microsoft.com/download/symbols
おそらく間違ったシンボルを持っていますが、新しいシンボルがダウンロードされていないので、次にどこに行きますか?お客様に連絡して、インストールされているSP、およびその他のパッチを尋ねる必要がありますか?そのマシンをインストールしてから、必要なシンボルを取得するためにdmpファイルでデバッガーを実行する必要がありますか?
解決
ミニダンプのデバッグに何を使用していますか?つまり、WinDBGまたはVisual Studioですか?そして、ミニダンプはどのように生成されましたか?
システムdllシンボルを正しく解決するには、ミニダンプに十分な情報が必要です。シンボルのローカルダウンロードまたは http://msdl.microsoft.com/ を使用していますか?
更新:MicrosoftのパブリックシンボルストアをTools-> Options-> Debugging-> Symbols-> Symbolファイル(.pdb)の場所に追加し、右クリックしてシンボルを手動でロードできるようになります。 [モジュール]ウィンドウのモジュールで、自動的に実行されない場合はロードします。
また、VS 2005は _NT_SYMBOL_PATH
を見てミニダンプシンボルを解決しない可能性があります(おそらく)。
他のヒント
WinDbgを使用している場合( Debugging Tools for Windows パッケージ)、Microsoftから適切なシンボルを自動的に取得するのは簡単です。 " .symfix"を使用してシンボルパスを構成します。 (または、単に既存のシンボル検索パスに追加するには、" .symfix +")コマンド。
完了したら、WinDbgにクラッシュダンプをロードしたら、「。reload / f」と入力します。 WinDbgにシンボルを再ロードさせます。ダンプファイル自体の情報を使用して、マシン上のDLLに関係なく、Microsoftのパブリックシンボルサーバーから正しいシンボルを取得します。
何らかの理由でこれを行った後、シンボルが正しく読み込まれない場合は、「!sym noisy」と入力してください。 WinDbgのコマンドウィンドウに移動して、シンボルを再度リロードします。 WinDbgがそれらをロードしようとすると、検索/ロードプロセスで発生したエラーが出力されます。これらのエラーメッセージは、何が間違っているのか、なぜ正しいシンボルがロードされないのかをさらに診断するのに役立ちます。
この投稿には、使用します。
" Set _NT_SYMBOL_PATH = srv ...
"と入力する場合コマンドプロンプトには、次の2つの考慮事項があります。
-
cmd.exe
のset
コマンドは空白を無視しないため、これは&quotではなく"_NT_SYMBOL_PATH
"という変数を定義します;_NT_SYMBOL_PATH
"。 - そのコマンドプロンプトの子としてデバッガを起動する必要があります。ただし、コントロールパネルを使用して永続的な環境変数を設定する場合、または
setx
コマンド(Windows VistaまたはWindowsリソースキットのいずれか)を使用する場合、これを行う必要はありません。
シンボルパスを他の方法で設定している場合、これは適用されません。
このkbの記事の指示に従って、シンボルパスが設定されていることを確認してください。正しく、WinDbgがそれにアクセスし、ntdllシンボル(たとえば)が実際にシンボルキャッシュにダウンロードされること。この記事では、SymChkツールを使用してキャッシュ内のシンボルを手動でダウンロードして検証する方法についても説明しています。