35

WinDbg を使用する場合、プライベート シンボル ファイル (pdb?) はどこに配置する必要がありますか?

私の状況は次のとおりです。デバッグしたい DLL があります。この DLL のソース コードとシンボル ファイルがあります。この DLL は別の DLL (シンボルもソースもありません) によって呼び出され、次に EXE (シンボルもソースもありません) によって呼び出されます。

私の問題は、次のような警告が表示されることです

*** 警告: C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dllのチェックサムを確認できません

この警告が、コール スタックで次のタイプのメッセージを受け取る理由だと思います。

MyDll!AClass::AFunction+SomeHexAddress

私のファイル構造は次のようになります。

exe: C:\TheProgram\program.exe

呼び出し元の dll: C\TheProgram\SomeSubfolder\caller.???

デバッグしたい DLL: C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

注: シンボル ファイル パスとソース ファイル パスを、デバッグ DLL が生成された場所 (exe とは別のドライブのワークスペース) に設定しました。しかし、pdb + マップ ファイルをコピーして、必要な dll に配置しました。デバッグする..

4

5 に答える 5

47

返事が遅れて申し訳ありません。
あなたの投稿では、次のエラーメッセージが表示されていると述べています。

*** WARNING: Unable to verify checksum for C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

また、「DLLのシンボルをシンボルパスのどこに配置すればよいですか?」という質問もあります。

最初の問題に対する回答は次のとおりです。

不一致のシンボルを識別する手順。

  1. !sym noisy
  2. .reload
  3. x MyDll!* class *
    *これによりdllが再ロードされます。または、kbと入力して、DLLの呼び出しスタックを表示することもできます。
  4. !symquiet
    *元の静かなシンボルの読み込みにリセット

また、実行することができます

0:001> lmv m myDll  *(and examine the Checksum)

注:チェックサムがある場合、WindbgはDLLのチェックサムをPDBのチェックサムと照合できます。開発環境ごとに、チェックサムを生成する方法が異なります。

PDBを配置する場所に関する質問への回答は次のとおりです。

MyDll.pdbをシンボルストアに追加している場合は、次の構文を使用できます

.sympath SRV*c:\symcache*http://msdl.microsoft.com/download/symbols 

ロジャーが上で示唆したように...

ただし、ローカルにPDBがある場合は、このようにシンボルサーバーに移動する前に、最初にPDBへのパスを設定することをお勧めします。

.sympath C:\TheProgram\SomeSubfolder\AnotherSubfolder\;SRV*c:\symcache*http://msdl.microsoft.com/download/symbols

このように、Windbgは、Symbols Serverキャッシュを使用する前に、SomSubFolderディレクトリに対してローカルに見える必要があります。

ありがとう、アーロン

于 2009-02-21T21:46:29.657 に答える
3

ビルド プロセスの一環として、プライベート PDB ファイルとリリースされた EXE/DLL ファイルをシンボル サーバーにコピーします。これは最も単純な UNC パスですが、HTTP を使用してアクセスするように構成できます。

出力ファイルをコピーするには、SYMSTORE.EXE プログラムを使用します。

次に、そのパスを参照するようにデバッガー (Visual Studio と WinDbg を使用) を構成します。WinDbg の場合、これを行う最も簡単な方法は、環境変数を設定することです。

_NT_SYMBOL_PATH=
    SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols;
    \\symsvr\Symbols

(それはすべて 1 行である必要があります)

これにより、WinDbg が Microsoft シンボル サーバー (C:\WebSymbols にファイルをキャッシュ) を検索し、ローカル シンボル ストア ( \\symsvr\Symbols) も検索するように構成されます。

また、ソース サーバー ツールを使用して SVN の詳細を PDB ファイルに保存します。つまり、特定のリリースのビルドに使用された正確なソース ファイルに戻ることができます。を見てください...\Debugging Tools for Windows (x86)\srcsrv

于 2009-01-23T10:25:36.483 に答える
2

1つのオプションは、シンボルファイルを元の場所(つまり、ビルド出力フォルダー内)に残してから、 -yWinDbgコマンドラインオプションを使用してこれらのファイルを見つけることです。このアプローチを使用すると、シンボルファイルが常に最新であることが保証されます。

Microsoftヘルプから:

-y SymbolPath 
Specifies the symbol search path. Separate multiple paths with a 
semicolon (;). If the path contains spaces, it should be enclosed 
in quotation marks. For details, and for other ways to change this 
path, see Symbol Path. 
于 2009-01-23T04:15:13.143 に答える