我需要在Windbg中设置哪些设置才能像使用Visual Studio一样进入/通过MFC源代码?
答案 0 :(得分: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
或者,如果您要复制并粘贴到文件>符号文件路径... 对话框,使用此:
c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
c:\symbols
的{{1}}路径告诉Windbg在哪里存储从服务器下载的任何PDB的缓存副本。
通过使用Windbg(.symfix+
)启动MFC应用程序,强制加载MFC符号并检查输出(这是Windbg命令会话的日志),可以检查是否找到了正确的PDB:
windbg app.exe
请注意,mfc100d行包含私有pdb符号。如果最后一个命令显示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)
,而没有单词 private ,则表示您没有加载正确的PDB,并且您将无法进入MFC源。再试一次你的同情心。您还可以尝试打开mfc100d (pdb symbols)
并运行!sym noisy
命令,以查看有关尝试加载PDB的更多诊断信息。
如果您已完成默认的Visual Studio安装,则您的MFC(和C运行时)源将位于:
.reload /f mfcdllpath
对于VS2010。过去的版本具有类似的目录布局。您可以使用以下方式进行设置:
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
或将上一行(不含.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;
)复制并粘贴到文件>源文件路径... 对话框。
如果这些目录不存在,您可以查看Visual Studio认为MFC源代码的位置。
VS2010(可能还有2012年):
VS2008及更早版