JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:使用 dbx 调试程序     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  dbx 入门

2.  启动 dbx

3.  定制 dbx

4.  查看和导航到代码

5.  控制程序执行

6.  设置断点和跟踪

7.  使用调用堆栈

8.  求值和显示数据

9.  使用运行时检查

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

17.  使用 dbx 调试 Java 应用程序

18.  在机器指令级调试

检查内存的内容

examinex 命令用法

使用地址

使用格式

使用计数

使用地址的示例

dis 命令用法

listi 命令用法

在机器指令级单步执行和跟踪

在机器指令级单步执行

在机器指令级跟踪

在机器指令级设置断点

在地址处设置断点

regs 命令用法

平台特定寄存器

SPARC 寄存器信息

x86 寄存器信息

AMD64 寄存器信息

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

A.  修改程序状态

B.  事件管理

C.  宏

D.  命令参考

索引

regs 命令用法

使用 regs 命令可以打印所有寄存器的值。

regs 命令的语法如下:

regs [-f][-F]

-f 表示包括浮点寄存器(单精度)。-F 表示包括浮点寄存器(双精度)。

有关更多信息,请参见regs 命令

对于基于 SPARC 的系统:

dbx[13] regs -F
current thread: t@1
current frame:  [1]
g0-g3    0x00000000 0x0011d000 0x00000000 0x00000000
g4-g7    0x00000000 0x00000000 0x00000000 0x00020c38
o0-o3    0x00000003 0x00000014 0xef7562b4 0xeffff420
o4-o7    0xef752f80 0x00000003 0xeffff3d8 0x000109b8
l0-l3    0x00000014 0x0000000a 0x0000000a 0x00010a88
l4-l7    0xeffff438 0x00000001 0x00000007 0xef74df54
i0-i3    0x00000001 0xeffff4a4 0xeffff4ac 0x00020c00
i4-i7    0x00000001 0x00000000 0xeffff440 0x000108c4
y        0x00000000
psr      0x40400086
pc       0x000109c0:main+0x4    mov     0x5, %l0
npc      0x000109c4:main+0x8    st      %l0, [%fp - 0x8]
f0f1     +0.00000000000000e+00
f2f3     +0.00000000000000e+00
f4f5     +0.00000000000000e+00
f6f7     +0.00000000000000e+00
...

对于基于 x64 的系统:

(dbx) regs
current frame:  [1]
r15     0x0000000000000000
r14     0x0000000000000000
r13     0x0000000000000000
r12     0x0000000000000000
r11     0x0000000000401b58
r10     0x0000000000000000
r9      0x0000000000401c30
r8      0x0000000000416cf0
rdi     0x0000000000416cf0
rsi     0x0000000000401c18
rbp     0xfffffd7fffdff820
rbx     0xfffffd7fff3fb190
rdx     0x0000000000401b50
rcx     0x0000000000401b54
rax     0x0000000000416cf0
trapno  0x0000000000000003
err     0x0000000000000000
rip     0x0000000000401709:main+0xf9    movl $0x0000000000000000,0xfffffffffffffffc(%rbp)
cs      0x000000000000004b
eflags  0x0000000000000206
rsp     0xfffffd7fffdff7b0
ss      0x0000000000000043
fs      0x00000000000001bb
gs      0x0000000000000000
es      0x0000000000000000
ds      0x0000000000000000
fsbase  0xfffffd7fff3a2000
gsbase  0xffffffff80000000
(dbx) regs -F
current frame:  [1]
r15     0x0000000000000000
r14     0x0000000000000000
r13     0x0000000000000000
r12     0x0000000000000000
r11     0x0000000000401b58
r10     0x0000000000000000
r9      0x0000000000401c30
r8      0x0000000000416cf0
rdi     0x0000000000416cf0
rsi     0x0000000000401c18
rbp     0xfffffd7fffdff820
rbx     0xfffffd7fff3fb190
rdx     0x0000000000401b50
rcx     0x0000000000401b54
rax     0x0000000000416cf0
trapno  0x0000000000000003
err     0x0000000000000000
rip     0x0000000000401709:main+0xf9    movl     $0x0000000000000000,0xfffffffffffffffc(%rbp)
cs      0x000000000000004b
eflags  0x0000000000000206
rsp     0xfffffd7fffdff7b0
ss      0x0000000000000043
fs      0x00000000000001bb
gs      0x0000000000000000
es      0x0000000000000000
ds      0x0000000000000000
fsbase  0xfffffd7fff3a2000
gsbase  0xffffffff80000000
st0     +0.00000000000000000000e+00
st1     +0.00000000000000000000e+00
st2     +0.00000000000000000000e+00
st3     +0.00000000000000000000e+00
st4     +0.00000000000000000000e+00
st5     +0.00000000000000000000e+00
st6     +0.00000000000000000000e+00
st7     +NaN
xmm0a-xmm0d     0x00000000 0xfff80000 0x00000000 0x00000000
xmm1a-xmm1d     0x00000000 0x00000000 0x00000000 0x00000000
xmm2a-xmm2d     0x00000000 0x00000000 0x00000000 0x00000000
xmm3a-xmm3d     0x00000000 0x00000000 0x00000000 0x00000000
xmm4a-xmm4d     0x00000000 0x00000000 0x00000000 0x00000000
xmm5a-xmm5d     0x00000000 0x00000000 0x00000000 0x00000000
xmm6a-xmm6d     0x00000000 0x00000000 0x00000000 0x00000000
xmm7a-xmm7d     0x00000000 0x00000000 0x00000000 0x00000000
xmm8a-xmm8d     0x00000000 0x00000000 0x00000000 0x00000000
xmm9a-xmm9d     0x00000000 0x00000000 0x00000000 0x00000000
xmm10a-xmm10d   0x00000000 0x00000000 0x00000000 0x00000000
xmm11a-xmm11d   0x00000000 0x00000000 0x00000000 0x00000000
xmm12a-xmm12d   0x00000000 0x00000000 0x00000000 0x00000000
xmm13a-xmm13d   0x00000000 0x00000000 0x00000000 0x00000000
xmm14a-xmm14d   0x00000000 0x00000000 0x00000000 0x00000000
xmm15a-xmm15d   0x00000000 0x00000000 0x00000000 0x00000000
fcw-fsw  0x137f 0x0000
fctw-fop        0x0000 0x0000
frip     0x0000000000000000
frdp     0x0000000000000000
mxcsr    0x00001f80
mxcr_mask       0x0000ffff
(dbx)

平台特定寄存器

以下各表列出了可在表达式中使用的 SPARC、x86 和 AMD64 体系结构的平台特定寄存器名称。

SPARC 寄存器信息

以下寄存器信息适用于 SPARC 体系结构。

寄存器
说明
$g0 到 $g7
全局寄存器
$o0 到 $o7
“外部”寄存器
$l0 到 $l7
“本地”寄存器
$i0 到 $i7
“内部”寄存器
$fp
帧指针,等同于寄存器 $i6
$sp
堆栈指针,等同于寄存器 $o6
$y
Y 寄存器
$psr
处理器状态寄存器
$wim
窗口无效屏蔽寄存器
$tbr
捕获基址寄存器
$pc
程序计数器
$npc
下一程序计数器
$f0 到 $f31
FPU "f" 寄存器
$fsr
FPU 状态寄存器
$fq
FPU 队列

浮点寄存器的 $f0f1 $f2f3 ... $f30f31 对被视为具有 C 双精度类型(通常 $fN 寄存器被视为 C 浮点类型)。这些对也称为 $d0 ... $d30

以下四元浮点寄存器被视为具有 C 长双精度类型,可在 SPARC V9 硬件上使用:

$q0 $q4 through $q60

以下寄存器对组合了两个寄存器的最低有效 32 位,可在 SPARC V8+ 硬件上使用:

$g0g1 through $g6g7
$o0o1 through $o6o7

SPARC V9 和 V8+ 硬件上另外还提供了以下这些寄存器:

$xg0 through $xg7
$xo0 through $xo7
$xfsr $tstate $gsr
$f32f33 $f34f35 through $f62f63 ($d32 ... $$d62)

有关 SPARC 寄存器和寻址的更多信息,请参见《SPARC Architecture Reference Manual》(《SPARC 体系结构参考手册》)和《SPARC Assembly Language Reference Manual》(《SPARC 汇编语言参考手册》)。

x86 寄存器信息

下面的寄存器信息适用于 x86 体系结构。

寄存器
说明
$gs
交替数据段寄存器
$fs
交替数据段寄存器
$es
交替数据段寄存器
$ds
数据段寄存器
$edi
目标索引寄存器
$esi
源索引寄存器
$ebp
帧指针
$esp
堆栈指针
$ebx
通用寄存器
$edx
通用寄存器
$ecx
通用寄存器
$eax
通用寄存器
$trapno
异常向量数
$err
异常错误代码
$eip
指令指针
$cs
代码段寄存器
$eflags
标志
$uesp
用户堆栈指针
$ss
堆栈段寄存器

常用寄存器也使用其机器无关名称作为别名。

寄存器
说明
$sp
堆栈指针,等同于 $uesp
$pc
程序计数器,等同于 $eip
$fp
帧指针,等同于 $ebp
$ps

80386 下半部(16 位)寄存器为:

寄存器
说明
$ax
通用寄存器
$cx
通用寄存器
$dx
通用寄存器
$bx
通用寄存器
$si
源索引寄存器
$di
目标索引寄存器
$ip
指令指针,下 16 位
$flags
标志,下 16 位

80386 的前四个 16 位寄存器可分为多个 8 位部分:

寄存器
说明
$al
寄存器 $ax 的(右)下半部分
$ah
寄存器 $ax 的(左)上半部分
$cl
寄存器 $cx 的(右)下半部分
$ch
寄存器 $cx 的(左)上半部分
$dl
寄存器 $dx 的(右)下半部分
$dh
寄存器 $dx 的(左)上半部分
$bl
寄存器 $bx 的(右)下半部分
$bh
寄存器 $bx 的(左)上半部分

80387 的寄存器为:

寄存器
说明
$fctrl
控制寄存器
$fstat
状态寄存器
$ftag
标记寄存器
$fip
指令指针偏移
$fcs
代码段选择符
$fopoff
操作数指针偏移
$fopsel
操作数指针选择符
$st0 到 $st7
数据寄存器

AMD64 寄存器信息

下面的寄存器信息适用于 AMD64 体系结构:

寄存器
说明
rax
通用寄存器-为函数调用传递参数
rbx
通用寄存器-被调用方保存
rcx
通用寄存器-为函数调用传递参数
rdx
通用寄存器-为函数调用传递参数
rbp
通用寄存器-堆栈管理/帧指针
rsi
通用寄存器-为函数调用传递参数
rdi
通用寄存器-为函数调用传递参数
rsp
通用寄存器-堆栈管理/堆栈指针
r8
通用寄存器-为函数调用传递参数
r9
通用寄存器-为函数调用传递参数
r10
通用寄存器-临时
r11
通用寄存器-临时
r12
通用寄存器-被调用方保存
r13
通用寄存器-被调用方保存
r14
通用寄存器-被调用方保存
r15
通用寄存器-被调用方保存
rflags
标志寄存器
rip
指令指针
mmx0/st0
64 位媒体和浮点寄存器
mmx1/st1
64 位媒体和浮点寄存器
mmx2/st2
64 位媒体和浮点寄存器
mmx3/st3
64 位媒体和浮点寄存器
mmx4/st4
64 位媒体和浮点寄存器
mmx5/st5
64 位媒体和浮点寄存器
mmx6/st6
64 位媒体和浮点寄存器
mmx7/st7
64 位媒体和浮点寄存器
xmm0
128 位媒体寄存器
xmm1
128 位媒体寄存器
xmm2
128 位媒体寄存器
xmm3
128 位媒体寄存器
xmm4
128 位媒体寄存器
xmm5
128 位媒体寄存器
xmm6
128 位媒体寄存器
xmm7
128 位媒体寄存器
xmm8
128 位媒体寄存器
xmm9
128 位媒体寄存器
xmm10
128 位媒体寄存器
xmm11
128 位媒体寄存器
xmm12
128 位媒体寄存器
xmm13
128 位媒体寄存器
xmm14
128 位媒体寄存器
xmm15
128 位媒体寄存器
cs
段寄存器
os
段寄存器
es
段寄存器
fs
段寄存器
gs
段寄存器
ss
段寄存器
fcw
fxsavefxstor 内存映像控制字
fsw
fxsavefxstor 内存映像状态字
ftw
fxsavefxstor 内存映像标记字
fop
fxsavefxstor 内存映像最后一个 x87 op 代码
frip
fxsavefxstor 内存映像 64 位代码段偏移
frdp
fxsavefxstor 内存映像 64 位日期段偏移
mxcsr
fxsavefxstor 内存映像 128 位媒体指令控制和状态寄存器
mxcsr_mask
mxcsr_mask 中的设置位指示 mxcsr 中支持的特征位
ymmo
256 位高级向量寄存器
ymm1
256 位高级向量寄存器
ymm2
256 位高级向量寄存器
ymm3
256 位高级向量寄存器
ymm4
256 位高级向量寄存器
ymm5
256 位高级向量寄存器
ymm6
256 位高级向量寄存器
ymm7
256 位高级向量寄存器
ymm8
256 位高级向量寄存器
ymm9
256 位高级向量寄存器
ymm10
256 位高级向量寄存器
ymm11
256 位高级向量寄存器
ymm12
256 位高级向量寄存器
ymm13
256 位高级向量寄存器
ymm14
256 位高级向量寄存器
ymm15
256 位高级向量寄存器

高级向量 (AVX) 寄存器(ymm0ymm15)的域可被视为具有 C 整型、浮点型或双精度类型。