由于缺少符号,WinDbg!heap命令无法正常工作

时间:2011-08-04 13:00:29

标签: c++ debugging windbg

我正在尝试使用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 个答案:

答案 0 :(得分:5)

使用以下命令修复符号路径:

.symfix
.reload

答案 1 :(得分:3)

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

  1. 为下载的符号创建本地目录。我将使用“C:\ Symbols”。
  2. 从“文件”菜单中选择“符号文件路径...”。
  3. 输入“SRV * C:\ Symbols * http://msdl.microsoft.com/download/symbols”并按“确定”。
  4. 再试一次。最初下载符号时会有延迟。将来会使用本地副本(步骤1)。
  5. 有关详细信息,请参阅here

答案 2 :(得分:1)

您需要为应用程序设置符号,并将其指向Windows符号服务器。对于Windows符号服务器,你可以做史蒂夫所说的。

“SRV * C:\ *符号的http://msdl.microsoft.com/download/symbols”

之后,设置!sym noisy,它将在详细模式下进行符号加载。

执行.reload,这可以让您知道哪些符号是必需的但未找到。

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