使用Windbg进入MFC源代码

Kur*_*son 4 debugging mfc windbg

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

Kur*_*son 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
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的更多诊断信息.

MFC源路径

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

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

VS2008及更早版本

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