我正在尝试在调试时进入MFC源代码。但是,Visual Studio显然在加载适当的符号方面存在问题:
C:\ WINDOWS \ symbols \ dll \ mfc100.i386.pdb:PDB与图片不匹配。
我在SO上检查了其他问题,通常建议启用“符号服务器”。这没有帮助,因为它似乎只下载一个最小的PDB文件(~2 MB)而不是实际上允许您进入源(~20 MB)的PDB文件。
根据Cannot load symbols for 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
答案 0 :(得分:2)
正如本MSDN post(Crescens2k)所述 -
这些符号应该与VS使用的版本匹配,因此如果您安装的VC版本比VS当前使用的版本更新,它们可能会失去同步。 检查安装了VS2010的VC目录中的CRT版本。那里应该有一个redist目录,其下是CRT。检查这些文件的版本,看看它们是否与system32目录中的文件版本相同。这些通常应该匹配。如果他们没有检查VS的更新。最新版本应为10.0.40219.325,因此请确保已更新VS以使用它。
后来 -
...尝试手动应用MFC安全更新。 ......并且看看是否能解决所有问题。
令人高兴的是,使用WinDbg工具,您可以将问题定位到不匹配的符号,经验丰富的程序员(Crescens2k)的建议有助于解决版本与DLL#hell"版本不匹配的痛苦难题。