Kur*_*son 11
步入MFC源代码需要两件事:加载正确的MFC符号,并设置正确的源路径.
在Windbg中设置符号路径的常见建议是使用.symfix,它将公共Microsoft符号服务器添加到符号路径中.这将允许Windbg从Microsoft下载许多Windows DLL的PDB,包括MFC DLL.但是,这些PDB不包括源步进所需的私有符号.
相反,您需要告诉Windbg首先查找使用Visual Studio安装的私有符号PDB,然后再查看符号服务器:
.sympath c:\windows\symbols\dll
.symfix+ c:\symbols
Run Code Online (Sandbox Code Playgroud)
或者,如果要复制并粘贴到" 文件">"符号文件路径..."对话框中,请使用以下命令:
c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)
c:\symbols给出的路径.symfix+告诉Windbg在哪里存储从服务器下载的任何PDB的缓存副本.
您可以通过使用Windbg(windbg app.exe)启动MFC应用程序来检查是否找到了正确的PDB ,强制加载MFC符号,并检查输出(这是Windbg命令会话的日志):
0:000> $$ setup the correct sympath
0:000> .sympath c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
0:000> $$ find the MFC DLL's full path
0:000> lm fm mfc*
start end module name
528e0000 52fa2000 mfc100d C:\Windows\SysWOW64\mfc100d.dll
72390000 7239d000 MFC100ENU C:\Windows\SysWOW64\MFC100ENU.DLL
0:000> $$ force the symbols to load
0:000> .reload /f C:\Windows\SysWOW64\mfc100d.dll
0:000> $$ check for "private pdb symbols"
0:000> lm m mfc*
start end module name
528e0000 52fa2000 mfc100d (private pdb symbols) c:\windows\symbols\dll\mfc100d.i386.pdb
72390000 7239d000 MFC100ENU (deferred)
Run Code Online (Sandbox Code Playgroud)
请注意,mfc100d行包含私有pdb符号.如果最后一个命令显示mfc100d (pdb symbols),没有单词private,则表示您没有加载正确的PDB,并且您将无法进入MFC源.再试一次你的同情心.您还可以尝试打开!sym noisy并运行该.reload /f mfcdllpath命令,以查看有关尝试加载PDB的更多诊断信息.
如果您已完成默认的Visual Studio安装,则您的MFC(和C运行时)源将位于:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfcm
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src
Run Code Online (Sandbox Code Playgroud)
对于VS2010.过去的版本具有类似的目录布局.您可以设置:
.sympath C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfcm;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src;
Run Code Online (Sandbox Code Playgroud)
或者将上面一行(不带.sympath)复制并粘贴到文件>源文件路径...对话框中.
如果这些目录不存在,您可以查看Visual Studio认为MFC源代码的位置.
VS2010(可能还有2012年):
VS2008及更早版本