Oracle Solaris Studio 12.2:使用 dbx 调试程序

examine 或 x 命令用法

可使用 examine 命令或其别名 x 显示内存内容或地址。

下列语法用于以 format 格式显示始于 address 的 count 项内存内容。缺省的 address 为先前显示的最后一个地址后的下一个地址。缺省 count 为 1。缺省 format 与在先前的 examine 命令中使用的相同;如果这是给出的第一个命令,则为 X。

examine 命令的语法如下:


examine [address] [/ [count] [format]]

要以 format 格式显示 address1 到 address2(首末地址包含在内)的内存内容,请键入:


examine address1, address2 [/ [format]]

要以给定格式显示地址而不是地址内容,请键入:


examine address = [format]

要输出 examine 最后显示的地址后的下一个地址处存储的值,请键入:


examine +/ i

要输出表达式的值,请以地址形式输入表达式:


examine address=format
examine address=

使用地址

address 是求值结果为地址或可用作地址的任何表达式。可用 +(加号)替换 address,它以缺省格式显示下一个地址的内容。

例如,下面所示都是有效地址:

0xff99

绝对地址 

main

函数地址 

main+20

与函数地址的偏移 

&errno

变量地址 

str

指向字符串的指针值变量 

用于显示内存的符号地址的名称前有和号 (&)。函数名称前可以不带和号,例如,&main 等同于 main。寄存器名称前有美元符号 ($)。

使用格式

format 是 dbx 用来显示查询结果的地址显示格式。产生的输出取决于当前显示 format。要更改显示格式,应提供不同的 format 代码。

每个 dbx 会话开始时的缺省格式设置为 X,即以十六进制 32 位字显示地址或值。以下内存显示格式为合法格式。

i 

显示为汇编指令。 

d 

显示为十进制 16 位(2 字节)。 

D 

显示为十进制 32 位(4 字节)。 

o 

显示为八进制 16 位(2 字节)。 

O 

显示为八进制 32 位(4 字节)。 

x 

显示为十六进制 16 位(2 字节)。 

X 

显示为十六进制 32 位(4 字节)。(缺省格式) 

b 

显示为八进制字节。 

c 

显示为字符。 

w 

显示为宽字符。 

s 

显示为以空字节终止的字符串。 

W 

显示为宽字符串。 

f 

显示为单精度浮点数。 

F, g 

显示为双精度浮点数。 

E 

显示为扩展精度浮点数。 

ld, lD 

显示为十进制 32 位(4 字节)(与 D 相同)。 

lo, lO 

显示为八进制 32 位(4 字节)(与 O 相同)。 

lx, LX 

显示为十六进制 32 位(4 字节)(与 X 相同)。 

Ld, LD 

显示为十进制 64 位(8 字节)。 

Lo, LO 

显示为八进制 64 位(8 字节)。 

Lx, LX 

显示为十六进制 64 位(8 字节)。 

使用计数

count 为十进制重复计数。增量大小取决于内存显示格式。

使用地址的示例

下面的示例说明如何使用地址以及 count 和 format 选项来显示始于当前停止点的五个连续的反汇编指令。

对于基于 SPARC 的系统:


(dbx) stepi
stopped in main at 0x108bc
0x000108bc: main+0x000c: st    %l0, [%fp - 0x14]
(dbx) x 0x108bc/5i
0x000108bc: main+0x000c: st    %l0, [%fp - 0x14]
0x000108c0: main+0x0010: mov   0x1,%l0
0x000108c4: main+0x0014: or    %l0,%g0, %o0
0x000108c8: main+0x0018: call  0x00020b90 [unresolved PLT 8: malloc]
0x000108cc: main+0x001c: nop

对于基于 x86 的系统:


(dbx) x &main/5i
0x08048988: main       :  pushl  %ebp
0x08048989: main+0x0001:  movl   %esp,%ebp
0x0804898b: main+0x0003:  subl   $0x28,%esp
0x0804898e: main+0x0006:  movl   0x8048ac0,%eax
0x08048993: main+0x000b:  movl   %eax,-8(%ebp)