2024年6月15日发(作者:)
查看文章
配置windbg符号文件
2009-12-27 12:47
查找symbols和source
现在你很可能渴望开始调试,但仍然有一些东西你必须去做,因为它们将会很好的改善你的调试
体验。
首先确认WinDbg能找到你感兴趣模块的symbols。Symbols指出一个二进制命令与声明之间的联
系和什么变量正在被转移。换句话说,就是Symbols表。如果你在建立模块的地方,那么你将拥
有有效的symbols和source文件。但是如果你需要单步调试其他很早以前建立代码呢?或者,
在那种情况下,如果你的代码不在它被建立的地方呢?
明确的设置symbols所在的地方,使用.sympath命令。在命令窗口中中断(CTRL-BREAK)然后
输入:
.sympath SRV*
以便告诉WinDbg在Microsoft公开的symbols服务器上查找symbols。让WinDbg使用该服务以
及在本地保存一份已下载的symbols。例如,在D:DebugSymbols,你应该这么做:
.sympath SRV*d:DebugSymbols*/download/symbols
你偶尔会在symbols服务器上获取symbols时遇到一些故障。在这个情况下,使用!sym noisy 命
令以获得关于WinDbg尝试获取symbols的更多信息。然后使用 !lmi 查看WinDbg知道多少关于
ntoskrnl
的信息。然后尝试取得
ntoskrnl
的symbols,使用.reload /f。因而:
kd> !sym noisy
noisy mode - symbol prompts on
kd> !lmi nt
Loaded Module Info: [nt]
Module: ntoskrnl
Base Address: 80a02000
Image Name:
Machine Type: 332 (I386)
Time Stamp: 3e80048b Mon Mar 24 23:26:03 2003
Size: 4d8000
CheckSum: 3f6f03
Characteristics: 10e
Debug Data Dirs: Type Size VA Pointer
CODEVIEW 25, ee00, e600 RSDS - GUID: (0xec9b7590, 0xd1bb,
0x47a6, 0xa6, 0xd5, 0x38, 0x35, 0x38, 0xc2, 0xb3, 0x1a)
Age: 1, Pdb:
Image Type: MEMORY - Image read successfully from loaded memory.
Symbol Type: EXPORT - PDB not found
Load Report: export symbols
下面让我们用具体的命令来查看Symbol数据:
1、lm(命令):显示出程序运行加载的模块信息
2、!lmi [模块名]:显示模块的详细信息,并且还有命令(!db [模块名]),
它显示的信息要比!lmi多些
3、X modulename!symbols(命令):显示出所有的Symbols数据或者是指
定模块的Symbols数据
在WINDOWS调试工具帮助文件中,有关于这里使用的命令及其语法的描述。
输出symbols通常很大。WINDOWS调试工具包括一个symbol服务器,以便连接到Microsoft的
网络服务器保存这些公开的symbol。添加这些到你的symbol路径,然后加载它们:
kd> .sympath SRV*d:DebugSymbols*/download/symbols
Symbol search path is: SRV*d: DebugSymbols
*/download/symbols
kd> .reload /f nt
SYMSRV:
SYMSRV: from symbolssymbols: 9620480 bytes copied
DBGHELP: nt - public symbols
d:9B7590D1BB47A6A6D5383538C2B31A1nto
kd> !lmi nt
Loaded Module Info: [nt]
Module: ntoskrnl
Base Address: 80a02000
Image Name:
Machine Type: 332 (I386)
Time Stamp: 3e80048b Mon Mar 24 23:26:03 2003
Size: 4d8000
CheckSum: 3f6f03
Characteristics: 10e
Debug Data Dirs: Type Size VA Pointer
CODEVIEW 25, ee00, e600 RSDS - GUID: (0xec9b7590, 0xd1bb,
0x47a6, 0xa6, 0xd5, 0x38, 0x35, 0x38, 0xc2, 0xb3, 0x1a)
Age: 1, Pdb:
Image Type: MEMORY - Image read successfully from loaded memory.
Symbol Type: PDB - Symbols loaded successfully from symbol server.
d:9B7590D1BB47A6A6D5383538C2B
Compiler: C - front end [13.10 bld 2179] - back end [13.10 bld 2190]
Load Report: public symbols
d:9B7590D1BB47A6A6D5383538C2B
symbols只会给你一些信息,而不会提供源代码。在最简单的情况下,在它们被建立的时候,
source文件便在同一个地方(该位置包括2进制文件和symbol文件)。但是在大多数情况下,
你不能在那里找到它们(它们可能被移走了),你必须指定在哪里能找到它们。这时,你需要一
个源路径,例如,
.srcpath e:Win2003SP1
它的意思是:想要source文件,请查看e:Win2003SP1目录。
另一个解决方案是命名一个source服务器,如果你有:
.srcpath MySrcServer
如果你曾经在获取source文件时遇到麻烦,使用.srcnoisy 1以取得更多关于调试器查找它们
的信息。
/soft/
将最后一行复制一下,并加上新的参数使之以调试方法启动。修改结果如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP
Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP
Professional" /noexecute=optin /fastdetect /debug /debugport=com1
/baudrate=115200
保存这个ini 文件(这个文件若无法保存,请用鼠标右键单击这个文件,选择
“属
性”,然后去掉“只读”勾),重启系统,在启动时就可以看到菜单,可以进入
正常的
Windows XP,也可以进入Debug 模式的Windows XP。


发布评论