WinDbg命令不起作用,因为缺少符号。

4

我正在尝试使用WinDbg调试我的.NET应用程序并跟踪C++的非托管内存分配。

当我尝试运行!heap命令时,我会收到以下错误信息:

0:022> !heap
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Windows\system32\KERNEL32.dll - 
*************************************************************************
***                                                                   ***
***                                                                   ***
***    Your debugger is not using the correct symbols                 ***
***                                                                   ***
***    In order for this command to work properly, your symbol path   ***
***    must point to .pdb files that have full type information.      ***
***                                                                   ***
***    Certain .pdb files (such as the public OS symbols) do not      ***
***    contain the required information.  Contact the group that      ***
***    provided you with these symbols if you need this command to    ***
***    work.                                                          ***
***                                                                   ***
***    Type referenced: ntdll!_HEAP_ENTRY                             ***
***                                                                   ***
*************************************************************************
Invalid type information

我该如何修复这个错误?
3个回答

5
请使用以下命令来修复您的符号路径:
.symfix
.reload

3

配置符号服务器。按照以下步骤:

  1. 创建一个本地目录,用于存储下载的符号。我将使用“C:\Symbols”。
  2. 从“文件”菜单中选择“符号文件路径…”。
  3. 输入“SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols”,然后点击“确定”。
  4. 再次尝试。一开始会有延迟,因为正在下载符号。以后将使用本地副本(步骤1)。

有关详细信息,请参见此处


1

您需要为应用程序设置符号,并将其指向Windows符号服务器。对于Windows符号服务器,您可以按照Steve的建议进行操作。

"SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols"

接下来,设置 !sym noisy,这将以详细模式加载符号。

执行 .reload 命令,这将告诉您哪些符号是需要但未找到的。

如果您已经知道应用程序的 pdb 文件位置,请将符号路径指向该位置,并重复上述步骤以确保加载了所有必需的符号。


1
!heap 命令无法工作的问题在于调试器需要 Windows 自身的符号,而不是应用程序的符号。在这种情况下,需要 ntdll.dll 的符号。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接