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.pdb
forntdll.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 からのみ正しいシンボルをダウンロードする場合、ローカルにダウンロードされたシンボルをどのように使用しますか?
私の質問は基本的に、ローカルにダウンロードしてインストールしたシンボルをロードする方法ですか?