使用Windbg进入MFC源代码

时间:2013-02-22 18:56:50

标签: debugging mfc windbg

我需要在Windbg中设置哪些设置才能像使用Visual Studio一样进入/通过MFC源代码?

1 个答案:

答案 0 :(得分:11)

单步执行MFC源代码需要两件事:加载正确的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的更多诊断信息。

MFC源路径

如果您已完成默认的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年):

  • 启动Visual Studio
  • 打开一个项目
  • 在“项目”菜单中,选择“属性”
  • 在左窗格中,展开“配置属性”,然后选择“VC ++目录”
  • 在右侧窗格中,查看“源目录”的值

VS2008及更早版

  • 启动Visual Studio
  • 在“工具”菜单中,选择“选项”
  • 在左侧窗格中,展开“项目和解决方案”,然后选择“VC ++目录”
  • 在右侧窗格中,查看“源目录”的值