我有 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
用于ntdll.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 下载正确的符号,那么本地下载的符号有什么用?
我的问题基本上是如何加载本地下载和安装的符号?