在调试带有核心转储的进程时,我得到了以下错误。
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调试器会抛出这种类型的错误?
先谢谢你,桑托什。
发布于 2015-01-09 13:15:42
调试数据未映射可能意味着包含调试信息的可执行文件部分尚未映射到内存中。如果这是一个崩溃转储,那么您的选择是有限的,但是如果这是一个实时调试会话。您可以使用WinDbg .pagein命令来检索数据。要做到这一点,您需要知道寻呼的地址。如果您对模块起始地址使用!dh命令(您可以使用lm -在我的示例中,msvcr90.dll的lm mmsvcr90 ),您可能会看到如下所示(向下滚动a方法):
Debug Directories(1)
Type Size Address Pointer
cv 29 217d0 20bd0 Can't read debug data cb=0 这表明调试数据从模块开始的偏移量为217d0,长度为29。如果您尝试转储这些字节,您将看到(78520000是模块的起始地址):
kd> db 78520000+217d0 l29
785417d0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
785417e0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
785417f0 ?? ?? ?? ?? ?? ?? ?? ??-?? ????????? 如果执行.pagein /p 82218b90 785417d0,然后执行F5,当调试器重新插入时,您将看到(82218b90是我正在调试的进程的_EPROCESS地址):
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字节(可能是从另一个转储中),则可以插入它们并以这种方式加载符号。
发布于 2010-05-14 17:50:07
您是否为WinDbg设置了符号路径(请参阅步骤2@ http://blogs.msdn.com/iliast/archive/2006/12/10/windbg-tutorials.aspx),您的PDB文件是否在符号路径中?
我假设您正在测试一个在调试模式下构建的可执行文件,它会生成必要的PDB文件。
https://stackoverflow.com/questions/2832429
复制相似问题