【问题标题】:Debugging MFC: "mfc100.dll" cannot find or open pdb调试 MFC:“mfc100.dll”找不到或打开 pdb
【发布时间】:2014-04-11 09:08:48
【问题描述】:

我试图在调试时进入 MFC 源代码。但是,Visual Studio 在加载适当的符号时显然存在问题:

C:\WINDOWS\symbols\dll\mfc100.i386.pdb:PDB 与图像不匹配。

我检查了关于 SO 的其他问题,通常建议启用“符号服务器”。但这并没有帮助,因为它似乎只下载了一个最小的 PDB 文件(~2 MB),而不是一个实际使您能够进入源代码的 PDB 文件(~20 MB)。

根据Cannot load symbols for mfc100.dll,我应该从http://msdn.microsoft.com/en-us/windows/hardware/gg463028 下载完整的符号包。我这样做了,但这也无济于事,因为这个包实际上根本不包含 mfc100.dll 的符号。

接下来我尝试从另一个系统复制 PDB 文件。在我的本地 Win7 操作系统上,我有一个 2011 年 6 月 10 日(24.708 KB)的 mfc100.i386.pdb。在我调试的系统上,我有 mfc100.i386.pdb 来自 2010-03-18 (23.732 KB)。两者都“不匹配图像”。

那么我应该从哪里获得正确且完整的符号文件呢?

操作系统:Windows 8 x86。带有 VS 2010 C++ 项目的 Visual Studio 2013。 mfc100.dll 版本:10.00.40219.01

WinDbg !sym noisy 输出:

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
OK                                             C:\Windows\symbols\dll
DBGHELP: Symbol Search Path: c:\windows\symbols\dll
DBGHELP: Symbol Search Path: c:\windows\symbols\dll
0:000> .reload
Reloading current modules

DBGHELP: c:\windows\symbols\dll\mfc100.i386.pdb - mismatched pdb
DBGHELP: c:\windows\symbols\dll\dll\mfc100.i386.pdb - file not found
DBGHELP: c:\windows\symbols\dll\symbols\dll\mfc100.i386.pdb - file not found
DBGHELP: C:\WINDOWS\SYSTEM32\mfc100.i386.pdb - file not found
DBGHELP: mfc100.i386.pdb - file not found
DBGHELP: Couldn't load mismatched pdb for C:\WINDOWS\SYSTEM32\mfc100.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\WINDOWS\SYSTEM32\mfc100.dll
DBGHELP: mfc100 - no symbols loaded

************* Symbol Loading Error Summary **************
Module name            Error
mfc100                 PDB not found : c:\windows\symbols\dll\symbols\dll\mfc100.i386.pdb
                Unable to locate the .pdb file in this location

【问题讨论】:

  • pdbs 允许显示准确的调用堆栈而不是源代码,因为您需要源代码,除非您在 MS 开发团队工作,否则您不会看到该源代码
  • @EdChum 我说的是 C:\Program Files\Microsoft Visual Studio 12.0\VC\atlmfc\src\mfc 中的源代码。所以我确实有我需要的东西(不是 MS 开发人员)。
  • 好吧,我的错我误解了这个问题。因此,即使您将符号服务器设置为 `msdl.microsoft.com/download/symbols` 或下载 ms 符号,它仍然会失败吗?附加 WinDbg 时会发生什么,这是否仍然无法匹配 pdb 签名?
  • 执行:>!sym 嘈杂>.reload 您将获得有关符号加载失败原因的更多信息。(调试器显示有关其搜索符号的信息)
  • 我能想到的唯一选项-“检查安装VS2010的VC目录中的CRT版本。那里应该有一个redist目录,下面是CRT。检查版本这些文件并查看它们是否与您的 system32 目录中的版本相同。(social.msdn.microsoft.com/forums/vstudio/en-US/…)

标签: c++ visual-studio mfc debug-symbols


【解决方案1】:

正如MSDN post (by Crescens2k) 中所解释的 -

这些符号应与 VS 使用的版本匹配,因此如果您安装的 VC redist 版本比 VS 当前使用的版本更新,它们可能会不同步。 检查安装VS2010的VC目录中CRT的版本。那里应该有一个 redist 目录,下面是 CRT。检查这些文件的版本,看看它们是否与您的 system32 目录中的版本相同。这些通常应该匹配。如果没有,则检查 VS 的更新。最新版本应为 10.0.40219.325,因此请确保 VS 已更新以使用该版本。

后来——

...尝试手动应用 MFC 安全更新。 ...看看这是否能解决所有问题。

令人高兴的是,使用 WinDbg 工具,您可以找到符号不匹配的问题,并且经验丰富的程序员 (Crescens2k) 的建议帮助解决了“DLL 地狱”中版本不匹配的痛苦丑陋问题。

【讨论】:

  • 我需要提一下,我安装的解决问题的“更新”是VS 2010 SP1,我在这台机器上跳过了它,因为我无论如何都要使用VS2013。
猜你喜欢
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2015-01-27
相关资源
最近更新 更多