调试MFC:“mfc100.dll”无法找到或打开pdb

3
我试图在调试时进入MFC源代码。然而,Visual Studio显然在加载适当的符号方面存在问题:
C:\WINDOWS\symbols\dll\mfc100.i386.pdb: PDB与映像不匹配。
我查看了SO上的其他问题,通常建议启用“符号服务器”。但这并没有帮助,因为它似乎只下载一个最小的PDB文件(~2 MB),而不是一个实际允许您进入源代码的PDB文件(~20 MB)。
根据无法加载mfc100.dll的符号,我应该从http://msdn.microsoft.com/en-us/windows/hardware/gg463028下载完整的符号包。我已经这样做了,但这也没有帮助,因为此包实际上根本不包括mfc100.dll的符号。

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

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

操作系统:Windows 8 x86。Visual Studio 2013与VS 2010 C++项目。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

PDB文件可显示准确的调用堆栈,但无法显示源代码。要查看源代码,您需要加入微软开发团队。 - EdChum
@EdChum 不,它不会失败(并显示堆栈中的函数名称),但正如我在问题中所说,这些最小的PDB文件不允许我进入源代码。Windbg也不喜欢我的PDB文件:*** ERROR: Module load completed but symbols could not be loaded for C:\WINDOWS\SYSTEM32\mfc100.dll - floele
这里有一个链接:http://qualapps.blogspot.co.uk/2007/04/symbols-for-mfc-source-code.html,还有一篇关于此帖子的评论:http://social.msdn.microsoft.com/Forums/vstudio/en-US/7fddce63-b971-41c6-a12b-55ae4211a4fd/unable-to-step-into-visual-studio-2010-mfc-source-code?forum=vcgeneral,Jeff Booher说:“结果发现从本地符号缓存中删除“mfc100ud.i386.pdb”文件夹并禁用Microsoft公共符号存储解决了这个问题。”你试过这个方法吗? - EdChum
1
做:
!sym noisy .reload
你会获得更多关于符号加载失败的信息。(调试器会显示有关其符号搜索的信息)
- SChepurin
1
我能想到的唯一选择是:“检查安装VS2010时VC目录中CRT的版本。那里应该有一个redist目录,在其中是CRT。检查这些文件的版本,看看它们是否与您的system32目录中的版本相同。”(http://social.msdn.microsoft.com/forums/vstudio/en-US/2792e510-e156-4a99-9d7b-d42c77122dd4/mismatch-between-the-pdb-and-the-dll-for-msvcr100dll) - SChepurin
显示剩余8条评论
1个回答

2
如此MSDN post(由Crescens2k提供)所述 -

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

稍后 -

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

幸运的是,使用WinDbg工具,您可以将问题定位为符号不匹配,并且来自经验丰富的程序员(Crescens2k)的建议帮助解决了版本不匹配的痛苦问题“DLL hell”。


2
我需要提到解决问题的“更新”是VS 2010 SP1,因为我本来打算在这台机器上使用VS2013,所以跳过了它。 - floele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接