2024年6月15日发(作者:)

查看文章

配置windbg符号文件

2009-12-27 12:47

查找symbols和source

现在你很可能渴望开始调试,但仍然有一些东西你必须去做,因为它们将会很好的改善你的调试

体验。

首先确认WinDbg能找到你感兴趣模块的symbols。Symbols指出一个二进制命令与声明之间的联

系和什么变量正在被转移。换句话说,就是Symbols表。如果你在建立模块的地方,那么你将拥

有有效的symbols和source文件。但是如果你需要单步调试其他很早以前建立代码呢?或者,

在那种情况下,如果你的代码不在它被建立的地方呢?

明确的设置symbols所在的地方,使用.sympath命令。在命令窗口中中断(CTRL-BREAK)然后

输入:

.sympath SRV**/download/symbols

以便告诉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。