我正在尝试在调试时进入 MFC 源代码。但是,Visual Studio 显然在加载适当的符号时遇到问题:
C:\WINDOWS\symbols\dll\mfc100.i386.pdb: PDB 与图像不匹配。
我检查了其他问题,通常建议启用“符号服务器”。但这并没有帮助,因为它似乎只下载了一个最小的 PDB 文件(~2 MB),而不是一个实际上使您能够单步进入源代码的 PDB 文件(~20 MB)。
根据无法加载 mfc100.dll 的符号 http://social.msdn.microsoft.com/Forums/vstudio/en-US/119bfcea-eceb-4680-85d1-f004c4438673/cannot-load-symbols-for-mfc100dll-version-1003031901?forum=vcgeneral我应该从下载完整的符号包http://msdn.microsoft.com/en-us/windows/hardware/gg463028 http://msdn.microsoft.com/en-us/windows/hardware/gg463028。我这样做了,但它也没有帮助,因为这个包实际上根本不包含 mfc100.dll 的符号。
我尝试的下一步是从另一个系统复制 PDB 文件。在我的本地 Win7 操作系统上,我有一个 2011 年 6 月 10 日的 mfc100.i386.pdb (24.708 KB)。在我调试的系统上,我有 2010 年 3 月 18 日的 mfc100.i386.pdb (23.732 KB)。但两者都“与图像不匹配”。
那么我应该从哪里获取正确且完整的符号文件呢?
操作系统:Windows 8 x86。 Visual Studio 2013 与 VS 2010 C++ 项目。 mfc100.dll版本:10.00.40219.01
WinDbg !sym noisy
output:
************* 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
正如本节中所解释的MSDN 帖子 http://social.msdn.microsoft.com/forums/vstudio/en-US/2792e510-e156-4a99-9d7b-d42c77122dd4/mismatch-between-the-pdb-and-the-dll-for-msvcr100dll(由 Crescens2k 提供)-
这些符号应该与 VS 使用的版本相匹配,因此如果您安装的 VC redist 版本比 VS 当前使用的版本更新,它们可能会不同步。
在VS2010安装的VC目录下检查CRT的版本。那里应该有一个 redist 目录,其下是 CRT。检查这些文件的版本,看看它们是否与您的system32目录中的文件版本相同。这些通常应该匹配。如果没有,请检查 VS 的更新。最新版本应为 10.0.40219.325,因此请确保 VS 已更新为可以使用该版本。
然后 -
...尝试手动应用 MFC 安全更新。 ...看看是否可以解决所有问题。
令人高兴的是,使用 WinDbg 工具,您可以将问题定位到不匹配的符号,并且经验丰富的程序员 (Crescens2k) 的建议帮助解决了来自“DLL 地狱”的版本不匹配这一令人痛苦的丑陋问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)