Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

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 可以替换为 +(加号),该符号以缺省格式显示下一个地址的内容。

以下示例为有效地址:

0xff00
绝对地址
main
函数地址
main+20
与函数地址的偏移
&errno
变量地址
str
指向字符串的指针值变量

用于显示内存的符号地址的名称前有和号 (&)。使用函数名称时不必带有和符号;&main 等效于 main。寄存器名称前有美元符号 ($)。

使用格式

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

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

i
显示为汇编指令
d
显示为十进制 16 位(2 字节)
D
显示为十进制 32 位(4 字节)
o
显示为八进制 16 位(2 字节)
O
显示为八进制 32 位(4 字节)
x
显示为十六进制 16 位(2 字节)
X
显示为十六进制 32 位(4 字节)(缺省格式)
b
显示为八进制字节
c
显示为字符
n
显示为十进制(1 字节)。
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 字节)

使用计数

该计数是以十进制表示的重复计数。增量大小取决于内存显示格式。

使用地址的示例

以下示例说明如何使用地址和格式选项来显示从当前停止点开始的五个连续反汇编指令。

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