首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows调试- WinDbg

Windows调试- WinDbg
EN

Stack Overflow用户
提问于 2010-05-14 15:13:26
回答 2查看 943关注 0票数 0

在调试带有核心转储的进程时,我得到了以下错误。

代码语言:javascript
复制
0:000> !lmi test.exe
Loaded Module Info: [test.exe] 
         Module: test
   Base Address: 00400000
     Image Name: test.exe
   Machine Type: 332 (I386)
     Time Stamp: 4a3a38ec Thu Jun 18 07:54:04 2009
           Size: 27000
       CheckSum: 54c30
Characteristics: 10f  
Debug Data Dirs: Type  Size     VA  Pointer
                 MISC   110,     0,   21000  [Debug data not mapped]
                  FPO    50,     0,   21110  [Debug data not mapped]
             CODEVIEW 31820,     0,   21160  [Debug data not mapped] - Can't validate symbols, if present.
     Image Type: FILE     - Image read successfully from debugger.
                 test.exe
    Symbol Type: CV       - Symbols loaded successfully from image path.
    Load Report: cv symbols & lines 

有谁知道error CODEVIEW 31820, 0, 21160 [Debug data not mapped] - Can't validate symbols, if present.到底是什么意思吗?

这个错误是否意味着我不能从可执行文件中读取公共/私有符号?

如果不是这样,为什么WinDbg调试器会抛出这种类型的错误?

先谢谢你,桑托什。

EN

回答 2

Stack Overflow用户

发布于 2015-01-09 13:15:42

调试数据未映射可能意味着包含调试信息的可执行文件部分尚未映射到内存中。如果这是一个崩溃转储,那么您的选择是有限的,但是如果这是一个实时调试会话。您可以使用WinDbg .pagein命令来检索数据。要做到这一点,您需要知道寻呼的地址。如果您对模块起始地址使用!dh命令(您可以使用lm -在我的示例中,msvcr90.dll的lm mmsvcr90 ),您可能会看到如下所示(向下滚动a方法):

代码语言:javascript
复制
Debug Directories(1)
    Type       Size     Address  Pointer  
    cv           29       217d0    20bd0    Can't read debug data cb=0  

这表明调试数据从模块开始的偏移量为217d0,长度为29。如果您尝试转储这些字节,您将看到(78520000是模块的起始地址):

代码语言:javascript
复制
kd> db 78520000+217d0 l29  
785417d0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????  
785417e0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????  
785417f0  ?? ?? ?? ?? ?? ?? ?? ??-??                       ?????????  

如果执行.pagein /p 82218b90 785417d0,然后执行F5,当调试器重新插入时,您将看到(82218b90是我正在调试的进程的_EPROCESS地址):

代码语言:javascript
复制
kd> db 78520000+217d0 l29  
785417d0  52 53 44 53 3f d4 6e 7a-e8 62 44 48 b2 54 ec 49  RSDS?.nz.bDH.T.I  
785417e0  ae f1 07 8c 01 00 00 00-6d 73 76 63 72 39 30 2e  ........msvcr90.  
785417f0  69 33 38 36 2e 70 64 62-00                       i386.pdb.  

现在执行.reload /f msvcr90.dll将加载符号。对于崩溃转储,如果您可以找到丢失的0x29字节(可能是从另一个转储中),则可以插入它们并以这种方式加载符号。

票数 1
EN

Stack Overflow用户

发布于 2010-05-14 17:50:07

您是否为WinDbg设置了符号路径(请参阅步骤2@ http://blogs.msdn.com/iliast/archive/2006/12/10/windbg-tutorials.aspx),您的PDB文件是否在符号路径中?

我假设您正在测试一个在调试模式下构建的可执行文件,它会生成必要的PDB文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2832429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档