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

C++ VS 2013缺少符号(msvcr120.i386.pdb),c++,debugging,visual-studio-2013,C++,Debugging,Visual Studio 2013,我有一个非常令人沮丧的问题,我正在调试我的代码,为了完成调用堆栈,我需要为msvcr120.dll(msvcr120.i386.pdb)获取符号 问题是,我不能得到它 尝试从MS Symbols服务器加载,结果: SYMSRV:找不到 :在符号服务器上找不到符号 尝试从MS下载各种Windows版本的手动符号软件包,下载了aprox。2GB,msvcr的符号从90到110,以及两个120(来自Win 10软件包): msvcr120.i386.coresys.pdb msvcr120_c

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

问题是,我不能得到它

  • 尝试从MS Symbols服务器加载,结果:
SYMSRV:找不到

:在符号服务器上找不到符号

  • 尝试从MS下载各种Windows版本的手动符号软件包,下载了aprox。2GB,msvcr的符号从90到110,以及两个120(来自Win 10软件包):
msvcr120.i386.coresys.pdb

msvcr120_clr0400.i386.pdb


那么,有没有办法获取“msvcr120.i386.pdb”?

为了获取文件的正确pdb,您需要知道实际加载了哪个模块。如果在运行时创建程序的崩溃转储(.DMP)(可以使用taskmanager执行此操作),它将显示加载的确切文件,包括其完整路径。您还可以使用像dependency walker这样的工具,它可以更好地找到完整路径

获得路径后,可以通过右键单击、加载并指向所讨论的确切文件,专门尝试强制加载该模块的符号。这应该得到正确的散列,并将正确的PDB从MS符号存储加载到本地缓存中

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


如果您定期进行开发工作,则应禁用Windows自动将内容放入兼容模式。这将为您节省很多麻烦。

我的符号缓存中有这个pdb,但它有一个不同的哈希。现在还不清楚为什么您的版本不同,这往往发生在您有早期版本的DLL时。也许你是通过使用VisualStudio的测试版得到的。如果它实际上是一个beta版,而你不知何故在到期日前后进行了黑客攻击,那么FuggedaButtit。否则考虑应用。我正在处理VS 2013与更新5。我安装了您链接的更新,v4,但没有更改,VS仍然无法从服务器获取msvcr120.dll的符号。如何禁用自动兼容模式?互联网上出现了许多与微软word有关的结果。我在windows上工作已经很多年了。但正如我所记得的,有一种方法可以禁用特定EXE的兼容性模式,并且通常在系统级别禁用。这两种方法都可以通过GUI或注册表实现。我相对确定组策略编辑器是GUI方法。