为什么Windbg无法从我的pdb文件读取符号?

时间:2018-08-14 14:52:58

标签: visual-studio security debugging windbg ollydbg

我的pdb文件MFCLibrary1.pdb由Virtual Studio 2017生成,我将其放在其原始目录G:\MFCLibrary1\Debug\中,设置了符号路径,并且windbg可以正常加载,但是我无法读取任何符号信息使用x MFCLibrary1!*命令,如下图所示: enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

link.exe过去对于大型项目而言运行相当缓慢,事实证明,大部分运行缓慢都来自于生成PDB文件。

Visual Studio 2017现在默认使用新开关/DEBUG:FASTLINK,它会生成一个最小的PDB文件,并将其余调试信息保留在.obj文件中。

此选项的明显好处是2x to 4x improvement in link time,但它也有一些缺点。

缺点#1 -用于调试版本的PDB文件不再包含符号调试所需的所有信息。

如果您打算在与构建项目的机器不同的机器上调试项目,则仍然需要生成完整的符号文件。

这可以通过以下两种方式之一完成:

  1. 通过运行 Build->构建用于解决方案的完整程序数据库,可以从Visual Studio的菜单将现有的FASTLINK PDB转换为FULL PDB。 Build full program database

  2. 可以通过在项目的 Linker-> Debugging 属性页上将 Generate Debug Info 开关设置为/DEBUG:FULL来永久更改。 Linker property page

缺点#2 -较旧的工具(尤其是使用dbghelp.dll的工具,例如WinDbg)不了解新的FASTLINK符号文件格式。

某些版本拒绝加载FASTLINK符号,其他版本则崩溃或挂起。最好将其更新为最新版本。

在我的计算机上,FASTLINK符号在WinDbg 10.0.15063.137版本中可以正常工作,因此将调试工具更新到该版本或更高版本应该可以。

如果由于某种原因而无法移至新版本的调试工具,则如上所述,生成FULL PDB是下一个最佳选择。不幸的是,这样做,您将看不到Visual Studio 2017附带的改进的链接时间。