【问题标题】:VS 2013 missing symbols (msvcr120.i386.pdb)VS 2013 缺少符号 (msvcr120.i386.pdb)
【发布时间】:2015-10-21 07:27:24
【问题描述】:

我有一个非常令人沮丧的问题,我正在调试我的代码,为了完整的调用堆栈,我需要获取 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 版本的手动符号包,下载了 aprox。 2GB,msvcr 的符号从 90 到 110,以及两个 120(来自 Win 10 包):

msvcr120.i386.coresys.pdb

msvcr120_clr0400.i386.pdb

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

【问题讨论】:

  • 我的符号缓存中有这个 pdb,但它有不同的哈希值。目前尚不清楚为什么您的版本不同,当您拥有该 DLL 的早期版本时,往往会发生这种情况。也许你是从使用 Visual Studio 的 beta 版本中得到的。如果它实际上是一个测试版并且你以某种方式破解了到期日期然后fuggedaboutit。否则考虑申请the updates
  • 我正在使用更新 5 开发 VS 2013。我安装了您链接的更新 v4,但没有任何变化,VS 仍然无法从服务器获取 msvcr120.dll 的符号。跨度>

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


【解决方案1】:

为了获得文件的正确 PDB,您需要知道实际加载了哪个模块。如果您在运行时创建程序的故障转储 (.DMP)(您可以使用 taskmanager 执行此操作),它应该向您显示加载的确切文件,包括它的完整路径。您还可以使用依赖遍历器之类的工具,它可能会更好地找到完整路径。

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

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

如果您经常进行开发工作,则应禁用 Windows 自动将其置于兼容模式。它将为您省去很多麻烦。

【讨论】:

  • 如何禁用自动兼容模式?互联网上出现了许多与 microsoft word 有关的结果。
  • 我已经很多年没有在windows下工作了。但我记得有一种方法可以禁用特定 EXE 的兼容模式,并且通常在系统级别。两者都可以通过 GUI 或注册表实现。我比较确定组策略编辑器是 GUI 方法。
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 2014-06-09
相关资源
最近更新 更多