6

Windows 7 x64 SP1 を使用しています。以下からシンボルをダウンロードしました。

http://msdn.microsoft.com/en-us/windows/hardware/gg463028

Windows 7 x64 SP1 用の x64 RTM および x64 SP1 シンボルをダウンロードしてインストールしました。フォルダにインストールされT:\Symbolsます。

しかし、64 ビットのネイティブ C++ アプリケーションをデバッグすると、シンボルがまったく読み込まれません。たとえばntdll.dllの場合、PDB は次の場所にあります。

  • T:\Symbols\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12
  • T:\Symbols\ntdll.pdb\CFF40300FD804691B73E12CF2A150EE02

ただし、Visual Studio (2008/2010) はシンボルをロードしません。デバッグ中に、モジュール ビューから、 を選択ntdll.dllしてLoad Symbols From -> Symbol Path、 を指定しますntdll.pdb。上記の両方のパスについて、常に次のように表示されます。

一致するシンボル ファイルがこのフォルダーに見つかりませんでした。

T:\Symbolsこのフォルダ ( )も に追加しましDebugging -> Optionsたが、それでもシンボルが読み込まれません。デバッグ中はLoad All Symbolsボタンが有効になり、クリックしてもシンボルはロードされません!

32 ビットの場合、PDB ファイル名はwntdll.pdbforntdll.dllになり、上記の方法で GUID 名のフォルダーに保存されます。ただし、VS は 32 ビット デバッグ用のシンボルもロードしません。

非常に興味深いことに (そして苛立たしいことに)、 を選択すると、シンボルが完全にLoad Symbols From -> Microsoft Symbols Serverダウンロードおよびロードされます。次の場所にシンボルをダウンロードします (のフル パス):ntdll

ここに画像の説明を入力

\Users\...\AppData\Local\Temp\SymbolCache\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12

ここでは、GUID がパス内の GUID という名前のフォルダーと一致していることがわかりますT:\Symbolsが、手動でインストールされたシンボルの場合、VS はそれをロードしないように固定されています!

NTDLL.PDB の場合、それぞれのフォルダーが同じであり、PDB のサイズも同じであるにもかかわらず、タイムスタンプが異なる場合があります。

VS はシンボルを次の場所に配置することもあります。

C:\...\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols

VS が Microsoft Symbols Server からのみ正しいシンボルをダウンロードする場合、ローカルにダウンロードされたシンボルをどのように使用しますか?

私の質問は基本的に、ローカルにダウンロードしてインストールしたシンボルをロードする方法ですか?

4

1 に答える 1

11

RTM または SP1 シンボルのダウンロード リンクはほとんど役に立ちません。各パッチ日の後、変更された ntdll.dll またはその他の中央 OS ライブラリを取得します。これにより、「古い」pdbが役に立たなくなります。したがって、シンボル サーバーからそれらをダウンロードして、最新であることを確認する必要があります。

ただし、すべての dll が変更されるわけではないため、Symbol サーバーのダウンロード キャッシュを、ダウンロードしたシンボルをアンパッケージした場所と同じ場所に設定する必要があります。

次の場所に移動します。

ツール - オプション - デバッグ - シンボル

このディレクトリにキャッシュ シンボルのパスを設定します。

すべてのシンボルをロードするとは、現在のプロセスにロードされているすべてのモジュールのすべてのシンボルをロードすることを意味します。ただし、Windows で使用されるすべての dll のすべてのシンボルをダウンロードするわけではありません。Windbg をダウンロードすると、すべてのバイナリのシンボルを再帰的にダウンロードできる symchk.exe というツールが得られます。

于 2011-08-21T07:38:03.587 に答える