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

examinex 命令用法

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

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

examine 命令的语法如下:


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

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


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 位字显示地址或值。以下内存显示格式为合法格式。

显示为汇编指令。 

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

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

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

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

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

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

显示为八进制字节。 

显示为字符。 

显示为宽字符。 

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

显示为宽字符串。 

显示为单精度浮点数。 

F, g 

显示为双精度浮点数。 

显示为扩展精度浮点数。 

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 为十进制重复计数。增量大小取决于内存显示格式。

使用地址的示例

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

对于基于 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)