VS 2013缺少符号(msvcr120.i386.pdb)

时间:2015-10-21 07:27:25

标签: c++ debugging visual-studio-2013

我有一个非常令人沮丧的问题,我正在调试我的代码,而对于完整的调用堆栈,我需要获取msvcr120.dll(msvcr120.i386.pdb)的符号。

问题是,我无法得到它。

  • 尝试从MS Symbols Servers加载它,结果:
  

SYMSRV:找不到http://msdl.microsoft.com/download/symbols/msvcr120.i386.pdb/16F5E2EF340A453ABC8B8F67DC6FD8082/msvcr120.i386.pdb

     

http://msdl.microsoft.com/download/symbols:符号服务器上找不到符号。

  • 尝试从MS下载各种Windows版本的manualy符号包,下载了aprox。 2GB,msvcr的符号从90到110,两个120(来自Win 10包):
  

msvcr120.i386.coresys.pdb

     

msvcr120_clr0400.i386.pdb

那么,有没有办法获得" msvcr120.i386.pdb" ?

1 个答案:

答案 0 :(得分:2)

为了获得文件的正确PDB,您需要知道实际加载了哪个模块。如果在运行时创建程序的crashdump(.DMP)(可以使用taskmanager),它应该显示加载的确切文件,包括它的完整路径。您还可以使用依赖于walker的工具,这可以更好地找到完整路径。

获得路径之后,您可以通过右键单击,加载和指向相关的确切文件来专门尝试强制加载该模块的符号。这应该得到正确的哈希并将正确的PDB从MS符号存储加载到本地缓存中。

可能发生的事情是,您正在运行的程序有一个清单,调出DLL的特定SxS版本, OR 您的程序已经崩溃,Windows已将其置于“兼容模式” ”。无论哪种方式,这意味着程序和VS正在寻找DLL的不同版本,因此您遇到了问题。当程序在与您正在调试的计算机不同的计算机上崩溃时,您也可以看到这一点,特别是如果它们并非完全位于Windows更新的同一位置。

如果您经常开发工作,则应禁用Windows自动将内容置于兼容模式。它将为您节省许多麻烦。