- 浏览: 268429 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- mysql (5)
- boost (6)
- 工具 (10)
- IT生活 (7)
- 多线程 (3)
- Ruby (15)
- php (2)
- MongoDB (39)
- 移动互联网 (2)
- 测试 (8)
- c++ (28)
- 书 (1)
- 网站 (3)
- 网络编程 (14)
- 开源软件 (1)
- 分布式计算 (1)
- 得得得 (1)
- php,wordpress (1)
- error (5)
- 编译 (2)
- 学习 (1)
- 杀毒软件 (1)
- dd (0)
- linux (21)
- 数据库 (1)
- STL (1)
- c++/c (5)
- 软件设计 (1)
- 操作系统 (4)
- 库 (2)
- win32 (1)
- s (0)
- openssl (1)
- perl (2)
- debug (1)
- windows (4)
- python (12)
- windows 防火墙 (1)
- vs (1)
- vim (2)
- vc (1)
- 浏览器插件的危害 (1)
- curl (0)
- 判断手机号码合法性的库 (0)
- 地址备注 (0)
- 安装 File::Slurp (1)
- cenos (2)
- shell (1)
- linunx (1)
- internet (1)
- software (1)
- widows (1)
- linux io (1)
- nginx (2)
- 算法 (2)
- google (1)
- protobuf (2)
- tengine (1)
- tools (1)
- lua (2)
- liunx (1)
- vcard (1)
- lua-iconv (1)
- 网络 (2)
- teat (0)
- ldconfig linux (0)
- awk (0)
- grep (0)
- windws (2)
- linux 命令 (1)
- tcp dump (1)
- vmware (1)
- question2answer (2)
- mongdb (1)
- 正则 (1)
- OCR (2)
- Windows Server (1)
最新评论
dbx是UNIX下基于命令行界面的程序调试器,假如不能学会dbx,无疑将为你在UNIX端的编程上增添许多的困难。
dbx是通过交互执行dbx子命令来达到调试的目的的。
在调试程序前,必须先将-g选项包含在编译信息中,编译生成带调试信息的文件,即:cc -o filename -g file.c。
进入dbx通常只需输入"dbx filename"即可,filename为待调试的可执行程序名。
dbx加载后就显示提示符:(dbx),此时用户就可以输入dbx子命令进行调试了。
下面是一些dbx的常用子命令:
1.基本操作命令
run arg1 arg2 ... :以arg1,arg2,...为参数开始运行现有进程。
r:用上次使用的参数再次运行现有进程。
source filename:从文件名为filename的文件中读入dbx子命令并执行。
return:执行完目前的进程后返回。
sh command:不退出dbx,执行一条操作系统shell命令。
sh:暂时进入shell状态。
quit:退出dbx,若程序未执行完则终止其执行。
2.置断点与跟踪点命令
stop var at n:置断点命令,当第n行的变量var发生变化时将程序挂起。
stop var in proc:置断点命令,当过程proc的变量var发生变化时将程序挂起。
stop at n:置断点命令,当执行到第n行时将程序挂起。
stop in proc:置断点命令,当执行到过程proc时将程序挂起。
trace var at n:置跟踪点命令,当第n行的变量var改变时显示跟踪信息。
trace var in proc:置跟踪点命令,当过程proc的变量var改变时显示跟踪信息。
trace n:置跟踪点命令,当执行到第n行时显示被跟踪信息。
trace proc:置跟踪点命令,当执行到过程proc时显示被跟踪信息。
trace eXPr at n:置跟踪点命令,当执行到第n行时显示var的值。
delete nall:删除第n行的/所有的断点与跟踪点。
3.调试命令
cont at n:运行直至第n行。
print var:打印变量var的值。
printf "string",expr,...:以C语言的格式打印。
where:打印当前调试状态,包括当前进程的信息。
func:查看当前运行的进程名。
func proc:移至到调用proc进程的母进程处。
whatis name:显示对变量名或过程名name的类型。
step [n]:单步执行一行或n行,碰到线程调用时进入线程调用。
next [n]:单步执行一行或n行,碰到线程调用时拒绝进入线程调用。
skip [n]:跳过一个或n个断点,继续往下执行
dump [proc] [>file]:显示当前或proc过程的所有变量名及其值
assign var=expr:给变量var赋以表达式expr的值
4.读取被调试程序命令
list:列出从当前行开始的若干行源程序。
list n,m:列出从第n行到第m行的源程序。
/string:朝文件尾方向查找字符串string
?string:朝文件头方向查找字符串string
file filename:将查看的文件切换到文件filename处
基本的几个命令:
dbx *.out
dbx>stop at ***.cpp:123 (文件加行号)
dbx>stop in *** (函数名)
dbx>ignore SIGUSR2 RTMINT+5 RTMINT+6
dbx>run
dbx>cont
dbx>next
[精华] dbx 命令命令详解[转贴]
http://www.chinaunix.net 作者:li2002 发表于:2008-05-18 13:46:39
【发表评论】 【查看原文】 【C/C++讨论区】【关闭】
dbx 命令
用途
提供了一个调试和运行程序的环境。
语法
dbx [ -a ProcessID ] [ -c CommandFile ] [ -d NestingDepth ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:...| pathfile ] [ -k ] [ -u ] [ -F ] [ -r ] [ -x ] [ ObjectFile [ CoreFile ] ]
描述
dbx 命令为 C、C++、Pascal 和 FORTRAN 语言程序提供了一个符号性的调试程序,允许您按照下面的内容执行操作:
检验对象和核心文件。
为程序运行提供一个控制环境。
在选中的语句处设置断点或单步执行程序。
使用符号变量进行调试并将它们以正确的格式显示出来。
ObjectFile 参数是一个由编译器产生的目标(可执行)文件。在编译您的程序时,使用 -g(生成符号表)标志产生 dbx 命令需要的信息。
注:cc 命令的 -g 标志应该在对象文件进行编译时使用。如果没有使用 -g 标志或者如果符号引用被 strip 命令从 xcoff 文件中删除了,则 dbx 命令的符号性能将受到限制。
如果没有指定 -c 标志,dbx 命令将会在用户的 $HOME 目录中检查 .dbxinit 文件。然后它在用户当前目录中检查 .dbxinit 文件。如果在当前目录中存在一个 .dbxinit文件,该文件将覆盖用户的 $HOME 目录中的 .dbxinit 文件。如果在发现了 .dbxinit 文件存在于用户的 $HOME 目录中或者当前目录中,该文件的子命令将在调试部分开始时运行。使用编辑器创建一个 .dbxinit 文件。
如果没有指定 ObjectFile,那么 dbx 将询问要进行检查的目标文件的名称。缺省值是 a.out。如果当前目录中存在 core 文件或者指定了 CoreFile 参数,那么 dbx 将报告程序发生错误的位置。保留在核心映像中的变量、寄存器和内存可以被检查直到开始执行 ObjectFile。那时 dbx 调试程序提示输入命令。
表达式句柄
dbx 程序可以显示各种各样的表达式。您可以在 dbx 调试程序中使用 C 和 Pascal 语法的公共子集和一些 FORTRAN 扩展的子集来指定表达式。
以下运算符在调试程序中是有效的:
*(星号)或者 ^ (脱字符号) 表示正在取消引用间接寻址或者指针。
[ ](方括号)或者( )(圆括号) 表示数组表达式的下标。
. (句点) 通过指针和结构来使用该字段引用运算符。这将使得 C 运算符 ->;(箭头)变得没有必要,尽管它仍允许使用。
&(与符号) 获得变量的地址。
.. (两个句点) 在指定数组子部分时将上下界分开。例如:n[1..4]。
以下类型的运算在调试程序的表达式中是有效的:
代数运算 =、-、*、/(浮点运算的除法)、div(整数运算的除法)、mod 和 exp(乘幂运算)。
按位运算 -, I, bitand, xor, ~, << 和 >;>;
逻辑运算 or、and、not、II 和 &&
比较运算 <、>;、<=、>;=、< >; 或 !=、= 或 ==
其它 (类型名),sizeof
逻辑和比较表达式在 stop 和 trace 中作为条件使用的。
检验表达式类型。您可以通过重命名或者重载运算符的方式重设一个表达式类型。三种重命名的格式分别是:类型名(表达式),表达式 |类型名以及 (类型名)表达式。以下是一个示例,其中 x 变量是一个值为 97 的整数:
(dbx) print x
97
(dbx) print char (x), x \ char, (char) x, x
'a' 'a' 'a' 97命令行编辑
dbx 命令提供一种命令行编辑功能类似于由 Korn Shell 提供的功能。vi 模式提供 类似 vi 的编辑功能,而 emacs 模式赋予您类似于 emacs 的控制功能。
这些功能可以通过使用 dbx 子命令 set -o 或者 set edit 来开启。要打开 vi 风格的命令行编辑,您可以输入子命令 set edit vi 或者 set -o vi。
您也可以使用 EDITOR 环境变量来设置编辑模式。
dbx 命令将保存输入到历史文件 .dbxhistory 当中的命令。如果没有设置 DBXHISTFILE 环境变量,使用的历史文件是 $HOME/.dbxhistory。
按照缺省值,dbx 将保存最近输入的 128 个命令。DBXHISTSIZE 环境变量可以从来增加这一限制。
标志
-a ProcessID 将调试程序和正在运行的进程连接起来。为了连接调试程序,您需要拥有对该进程使用 kill 命令的权限。使用 ps 命令来决定进程的 ID。如果您获得许可,dbx 程序中断该进程,决定目标文件的完整名称,读入符号信息和提示输入命令。
-c CommandFile 读入标准输入之前,在文件中运行 dbx 子命令。$HOME 目录中指定的文件将首先被处理;然后处理当前目录中的文件。当前目录中的命令文件将会覆盖 $HOME 目录中的命令文件。如果指定的文件既不存在于 $HOME 目录也不存在于当前目录,将会显示警告消息。source 子命令可以在 dbx 程序运行后使用。
-d NestingDepth 设置程序块的嵌套限制。缺省的嵌套深度限制为 25。
-E DebugEnvironment 指定调试程序的环境变量。
-p oldpath=newpath:...| pathfile 以 oldpath=newpath 的格式在检查核心文件时指定替换的库的路径。oldpath 指定了将被替换的值(存储在核心文件中)而 newpath 指定了将要替换的新的值。这些可能是全部或者部分的,绝对路径或者相对路径。可以指定若干个替换,它们之间用冒号隔开。相反 -p 标志可以指定文件名,映射以前读入的描述格式。每行中只允许有一个映射从文件中读出。
-F 可以用来关闭缓慢读入模式并使 dbx 命令在启动时就读入全部符号。缺省情况下,缓慢读入模式是打开的:它在 dbx 会话初始化时读入需要的符号表信息。。在该模式下,dbx 将不会读入那些符号信息尚未被读入的变量和类型。因此,诸如 whereis i 等命令并不列出在所有函数中的变量 i 的全部实例。
-I Directory (大写 i)将 Directory 变量指定的目录包含到搜索源文件目录列表中。搜索源文件的缺省目录为:
文件编译时该源文件所在的目录。只有编译器设置了对象中的源路径时才能搜索目录。
当前目录。
当前程序所在的目录。
-k 映射内存地址;这对于内核调试是非常有用的。
-r 立即运行对象文件。如果它成功结束,dbx 调试程序将会退出。否则,将会进入调试程序并报告中断的原因。
注意:除非指定了 -r,dbx 命令将会提示用户并等待命令输入。
-u 让 dbx 命令为文件名加上 @ (at 符号) 前缀。该标志减少符号名混淆的可能性。
-x 防止 dbx 命令跳过来自于 FORTRAN 源代码的 _(下划线)字符。该符号允许 dbx 在符号之间区别哪些除了下划线以外都是相同的,例如 xxx 和xxx_。
示例
下列示例解释如何在启动 dbx 调试程序时同时启动一个进程。本例使用了一个名为 samp.c 的程序。该 C 程序首先经过 -g 标志的编译生成一个包含符号列表引用的目标文件。在此情况下,该程序命名为:samp:
$ cc -g samp.c -o sampsamp 程序运行后,操作系统会报告一个总线错误并将核心映像写入到您当前的工作目录当中,如下所示:
$ samp
Bus Error - core dumped要确定发生错误的位置,请输入:
$ dbx samp系统将会返回如下信息:
dbx version 3.1
Type 'help' for help.
reading symbolic information . . . [
using memory image in core]
25 x = 0;
(dbx) quit该示例解释了如何将 dbx 连接到进程当中去。该示例使用了如下程序 looper.c:
main()
{
int i,x[10];
for (i = 0; i < 10;);
}该程序将不会中止因为 i 不会增加。使用 -g 标志编译 looper.c 得到符号调试能力:
$ cc -g looper.c -o looper在命令行中运行 looper 并执行以下步骤就会在它运行的时候将 dbx 连接到程序中去:
要将 dbx 连接到 looper,您必须确定进程的 ID。如果您没有运行 looper 作为后台程序,您必须启动另外一个 Xwindow 窗口。在该 Xwindow 窗口中,输入:
ps -u UserID其中 UserID 是您的登录标识。所有属于您的活动的进程将会显示如下:
PID TTY TIME COMMAND
68 console 0:04 sh
467 lft3 10:48 looper在该示例中和 looper 相关的进程 ID 是 467。
要将 dbx 连接到 looper中,请输入:
$ dbx -a 467系统将返回如下的信息:
Waiting to attach to process 467 . . .
Successfully attached to /tmp/looper.
dbx is initializing
Type 'help' for help.
reading symbolic information . . .
attached in main at line 5
5 for (i = 0; i < 10;);
(dbx) 现在您可以查询并调试进程如同该程序最初就是由 dbx 来启动的。
要将目录添加到搜索可执行文件 objefile 的源文件的目录清单中,可以输入:
$dbx -I /home/user/src -I /home/group/src
objfileuse 子命令可以在 dbx 启动之后用来实现此功能。use 命令重新设置目录清单而 -I 标志则向清单中添加目录。
要使用 -r 标志,输入:
$ dbx -r samp 系统将会返回如下信息:
Entering debug program . . .
dbx version 3.1
Type 'help' for help.
reading symbolic information . . .
bus error in main at line 25
25 x = 0;
(dbx) quit-r 标志允许您在尽管没有设置核心映像的情况下在内存中检查您的进程的状态。
要指定调试程序的环境变量,输入:
dbx -E LIBPATH=/home/user/lib -E LANG=Ja_JP objfiledbx 子命令
注意:这些子命令只能在运行 dbx 调试程序时使用。
/ 在当前源文件中向前搜索某种模式。
? 在当前源文件中向后搜索某种模式。
alias(别名) 创建 dbx 子命令的别名。
assign(赋值) 为一个变量赋值。
attribute(属性) 显示所有或者选中属性对象的信息。
call(调用) 运行与指定的过程或函数相关的对象代码。
case(格式) 修改 dbx 调试程序解释符号的方式。
catch(捕捉) 在一个信号送到应用程序之前启动捕获这个信号。
clear(清除) 删除所有源指定行的停止线。
cleari 除去地址中所有的断点。
condition(条件) 显示全部或者选中的条件变量的信息。
cont 从当前停止点继续应用程序的执行直到程序终止或者遇到下一个断点。
delete(删除) 删除与指定事件数对应的跟踪和停止线。
detach(拆分) 继续应用程序的执行并退出调试程序。
display memory(显示内存) 显示内存中的内容。
down(降下) 将当前函数在堆栈中向下移动。
dump(转存) 显示指定过程中的变量的名称和值。
edit(编辑) 启动编辑器编辑指定文件。
file(文件) 将当前源文件修改成指定的文件。
func(函数) 将当前函数修改成指定的过程或者函数。
goto(跳转到) 使指定行成为下一个运行的行。
gotoi 修改程序计数器地址。
help(帮助) 显示 dbx 子命令或主题的帮助信息。
ignore(忽略) 在一个信号送到应用程序之前停止捕获这个信号。
list(列表) 显示当前源文件的行。
listi 列出应用程序的指令清单。
map(映射) 显示关于应用程序装入特征的信息。
move(移动) 跳到下一行并显示。
multproc(多线程) 启用或禁用多线程调试。
mutex(互斥) 显示全部或者选中的互斥信息。
next(下一个) 运行应用程序直到下一个源程序行。
nexti 运行应用程序直到下一个机器指令。
print(打印) 打印表达式的值或运行一个过程并打印过程的返回代码。
prompt(提示符) 修改 dbx 命令提示符。
quit(退出) 停止 dbx 调试程序。
registers(寄存器) 显示所有通用寄存器、系统控制寄存器、浮点寄存器和当前指令寄存器的值。
rerun(重新运行) 按照以前设置的参数开始运行应用程序。
return(返回) 继续应用程序的运行直到达到返回一个指定的过程。
rwlock 显示 rwlocks 的信息。
run(运行) 开始运行一个应用程序。
screen(屏幕) 打开一个 Xwindow 作为 dbx 命令的交互。
set(设置) 为 dbx 调试程序变量定义一个值。
sh 传递命令到 shell 去运行。
skip(跳过) 从当前的停止处继续运行应用程序。
source(源) 从文件中读入 dbx 子命令。
status(状态) 显示活动的跟踪和停止子命令。
step(单步) 运行一个源命令行。
stepi 运行一个机器指令。
stophwp 设置一个硬件的观察点停止。
stop(停止) 停止运行应用程序。
stopi 在指定位置设置停止点。
thread(线程) 显示和控制线程。
trace(跟踪) 打印跟踪信息。
tracehwp 设置硬件观察点跟踪。
tracei 打开跟踪。
unalias(取消别名) 删除别名。
unset(取消设置) 删除一个变量。
up(上升) 将当前函数在堆栈中向上移动。
use(使用) 设置在搜索源文件时要搜索的目录列表。
whatis 显示应用程序组件的声明。
where 显示活动过程和函数的清单。
whereis 显示所有名字匹配指定标识符的符号的全限定。
which 显示给定标识符的全限定。
/ 子命令
/ [ RegularExpression [ / ] ]
/ 子命令在当前源文件中向前搜索由 RegularExpression 参数指定的模式。不带参数输入 / 子命令将会使 dbx 命令向前搜索以前的正则表达式。搜索将会在文件的结尾折返。
示例
要向前搜索当前源文件中 12 这个数字,请输入:
/ 12要重复以前的搜索,请输入:
/请参阅 ?(搜索)子命令和 regcmp 子例程。
? 子命令
? [ RegularExpression [ ? ] ]
? 子命令在当前源文件中向后搜索由 RegularExpression 参数指定的模式。不带参数输入 ? 子命令将会使 dbx 命令向后搜索以前的正则表达式。搜索将会在文件的结尾折返。
示例
要向后搜索当前源文件中的 z 字符,请输入:
?z要重复以前的搜索,请输入:
?参见 / (搜索)子命令和 regcmp 子例程。
alias 子命令
alias [ Name [ [ (Arglist) ] String | Subcommand ] ]
alias 子命令为 dbx 子命令创建别名。Name 参数是要创建的别名。String 参数是 dbx 子命令的序列,在执行完该子命令后可以通过 Name 引用这些序列。如果 alias 子命令没有指定参数,它将显示所有当前的别名。
示例
要用 rr 替换 rerun,请输入:
alias rr rerun要在命令行输入 printandstep 时运行 print n 和 step 两个子命令,输入:
alias printandstep "print n; step"alias 子命令也可以用作一个有限的宏工具。例如:
(dbx) alias px(n) "set $hexints; print n; unset $hexints"
(dbx) alias a(x,y) "print symname[x]->;symvalue._n_n.name.Id[y]"
(dbx) px(126)
0x7e在本示例中,别名 px 打印了一个十六进制的值而不会永久影响到调试环境。
assign 子命令
assign Variable =Expression
assign 子命令分配由 Expression 参数指定的值到 Variable 参数指定的变量当中去。
示例
要将数值 5 分配到 x 变量中,请输入:
assign x = 5要将变量 y 的值分配到变量 x 中,请输入:
assign x = y要将字符值 'z' 分配到变量 z 中,请输入:
assign z = 'z'要将布尔值 false 分配到逻辑类型变量 B 中,请输入:
assign B = false要将字符串 "Hello World" 分配到字符指针 Y 中,请输入:
assign Y = "Hello World"要禁用类型检查,将 dbx 调试程序变量 $unsafeassign 进行设置,输入:
set $unsafeassign参见 Displaying and Modifying Variables。
attribute 子命令
attribute [ AttributeNumber ... ]
attribute 子命令显示关于 AttributeNumber 参数定义的用户线程、互斥或者条件属性对象的相关信息。如果没有指定参数,将会列出所有的属性对象。
对于列出的每个属性对象,将会显示如下信息:
attr 按照 $aAttributeNumber 格式指出属性对象的符号名。
obj_addr 指出属性对象的地址。
type 指出属性对象的类型;对于用户线程、互斥以及条件变量的类型分别是 thr、mutex 或者 cond。
state 指出属性对象的状态。该状态可能是 valid 或者 inval。
stack 指出一个线程属性对象的堆栈大小属性。
scope 指出线程属性对象的作用域属性。这将决定线程的争用域并定义必须争用进程资源的线程的集合。对于系统或者进程争用域,作用域的值可以是 sys 或者 pro。
prio 指出线程属性对象的优先级属性。
sched 指出一个线程属性对象的调度策略属性。该属性控制了调度策略,可选的值为 fifo、rr(循环法)或者 other。
p-shar 指定互斥或者条件属性对象的进程共享属性。如果可以由不同进程的线程访问,该互斥或者条件是进程共享的。该属性值可以是 yes 或者 no。
protocol 指出互斥的协议属性。该属性决定了保持线程优先级互斥的作用。可选的值有 no_prio、prio 或者 protect。
注意:
dbx 调试程序的 print 子命令可以识别符号属性名称并可以用来显示相应对象的状态。
可用的属性取决于 POSIX 选项的实现。
示例
要列出所有的属性的信息,请输入:
attribute输出类似于:
attr obj_addr type state stack scope prio
sched p-shar
$a1 0x200035c8 mutex valid no
$a2 0x20003628 cond valid no
$a3 0x200037c8 thr valid 57344 sys 126 other
$a4 0x200050f8 thr valid 57344 pro 126 other
要列出属性 1 和 3 的信息,请输入:
attribute 1 3
输出类似于:
attr obj_addr type state stack scope prio
sched p-shar
$a1 0x200035c8 mutex valid no
$a3 0x200037c8 thr valid 57344 sys 126 other
参见 dbx 命令中 condition 子命令、mutex 子命令、 print 子命令和 thread 子命令。
另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Creating Threads、Using Mutexes 和 Using Condition Variables。
call 子命令
call Procedure ( [ Parameters ] )
call 子命令运行由 Procedure 参数指定的过程。返回代码不会打印出来。如果指定了参数,它们将传给正在运行的过程。
例子
运行 dbx 时要调用一个命令,请输入:
(dbx) call printf("hello")
helloprintf 成功返回。
case 子命令
case [ default | mixed | lower | upper ]
case 子命令修改 dbx 调试程序解释符号的方式。缺省的符号处理视当前使用的语言而定。如果当前的语言是 C、C++ 或者没有定义,这些符号将不会合并;如果当前的语言是 FORTRAN 或者 Pascal,这些符号就会合并成小写格式。如果符号需要使用与当前语言不一致的方法解释,则使用该子命令。
不带参数输入 case 子命令将会显示当前的 case 模式。
标志
default 随当前语言变化。
mixed 按实际显示的情况解释符号。
lower 按小写来解释符号。
upper 按大写来解释符号。
示例
要显示当前的大小写模式,请输入:
case要指示 dbx 命令按照符号实际形式解释符号,请输入:
case mixed要指示 dbx 按照大写形式解释符号,请输入:
case upper参见 Folding Variables to Lowercase and Uppercase。
catch 子命令
catch [ SignalNumber | SignalName ]
catch 子命令在信号送到应用程序之前启动捕获这个信号。该子命令在被调试的应用程序处理诸如中断之类的信号时非常有用。待捕获的信号可以分别用 SignalNumber 参数按号码或者用 SignalName 参数按名称来指定。信号名是不区分大小写的,而前缀 SIG 是可选的。如果既没有指定 SignalNumber 也没有指定 SignalName 参数,则将缺省捕获除了 SIGHUP、SIGCLD、SIGALARM 和 SIGKILL 之外的所有信号。如果没有指定参数,将显示当前能够捕获的信号的列表。
示例
要显示当前能够被 dbx 捕获的信号的列表,请输入:
catch要捕获 SIGALARM 信号,请输入:
catch SIGALARM参见ignore 子命令和信号处理。
clear 子命令
clear SourceLine
clear 子命令删除所有给定源文件行的停止。SourceLine 参数可以按照两种格式指定:
当作一个整数
当作一个文件名字符串,后面跟一个:(冒号)和一个整数
示例
要删除第 19 行中设置的断点,请输入:
clear 19参见 cleari 子命令和 delete 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
cleari 子命令
cleari Address
cleari 子命令清除由 Address 参数指定的地址的所有断点。
示例
要删除设置在地址 0x100001b4处的断点,请输入:
cleari 0x100001b4要删除设置在 main() 过程地址处的断点,输入:
cleari &main请参阅 clear 子命令、delete 子命令和 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
condition 子命令
condition [ wait | nowait | ConditionNumber ... ]
condition 子命令显示一个或多个条件变量的相关信息。如果指定了一个或多个 ConditionNumber 参数,condition 子命令将会显示指定条件变量的信息。如果没有指定标志或者参数,condition 子命令列出所有条件变量的清单。
各个条件的信息列表如下:
cv 按照 $cConditionNumber 的格式指出条件变量的符号名称。
obj_addr 设定条件变量的内存地址。
num_wait 设定条件变量中等待的线程的数量。
waiters 列出等待条件变量的用户线程。
注意: dbx 调试程序的print 子命令识别符号条件变量名称并用来显示相应对象的状态。
标志
wait 显示有等待线程的条件变量。
nowait 显示没有等待线程的条件变量。
示例
要显示关于所有条件变量的信息,请输入:
condition要显示有等待线程的条件变量的信息,请输入:
condition wait
要显示关于条件变量 3 的信息,请输入:
condition 3类似的输出为:
cv obj_addr num_wait waiters
$c3 0x20003290 0参见 attribute 子命令、mutex 子命令、print 子命令以及thread 子命令。
另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Condition Variables。
cont 子命令
cont [ SignalNumber | SignalName ]
cont 子命令从当前的断点开始继续执行应用程序直到该程序结束或者遇到另外一个断点。如果通过 SignalNumber 参数(指定信号数)或者 SignalName 参数(指定信号名),该程序将假定已经收到该信号并继续执行。信号名不区分大小写并且其前缀 SIG 是可选的。如果没有指定信号,该程序将如同没有停止下来过一样继续执行。
示例
要从当前断点位置继续执行程序,请输入:
cont要如同收到 SIGQUIT 信号一样继续执行程序,请输入:
cont SIGQUIT请参阅 dbx 命令的 detach 子命令、dbx 的 goto子命令、dbx 的 next 子命令、dbx 的 skip 子命令、dbx 的 step 子命令。
delete 子命令
delete { Number ... | all }
delete 子命令从应用程序中删除跟踪和停止。可以通过 Number 参数来删除指定跟踪和停止,或者通过 all 标志来删除所有跟踪和停止。使用 status 子命令来显示 dbx 调试程序为跟踪和停止生成的相应跟踪号和停止号。
标志
all 删除所有的跟踪和停止。
示例
要从应用程序中删除所有的跟踪和停止,请输入:
delete all要删除事件号为 4 的跟踪和停止,请输入:
delete 4请参阅 clear 子命令、cleari 子命令、status 子命令和 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
detach 子命令
detach [ SignalNumber | SignalName ]
detach 子命令将继续应用程序的执行并退出调试程序。信号可以通过以下任意一项指定:
名称,使用SignalName 参数
序号,使用SignalNumber 参数
信号名不区分大小写而且前缀 SIG 是可选的。
如果指定了信号,程序将如同接收到该信号一样继续执行。如果没有指定信号,该程序将如同没有停止下来过一样继续执行。
示例
要退出 dbx而继续执行应用程序,请输入:
detach要退出 dbx 并如同收到 SIGREQUEST 信号那样继续执行程序,请输入:
detach SIGREQUEST参见 Using dbx Debug Program。
display memory 子命令
{ Address,Address/ | Address/ [ Count ] } [ Mode ] [ >;File ]
不带任何关键字进行初始化的 display memory 子命令将显示由如下因素控制的内存的部分内容:
显示内存的范围是由下面两种方法之一指定的:
两个 Address 参数,则这两个地址之间的内容都将显示出来,
或者
一个 Address 参数指定显示起始地址以及一个 Count 参数指定从 Address 开始显示的行数。
在名称之前加上一个 &(与符号)指定符号地址。地址可以是其它地址和 +(加号)、 -(减号)以及 *(间接乘法)运算组成的表达式。任何包含在括号中间的表达式都将认为是一个地址。
显示内存的格式是由 Mode 参数控制的。Mode 参数的缺省值为当前模式。 Mode 参数的初始值为 X。可能存在的模式包括:
b 打印八进制的字节。
c 按字符打印一个字节。
d 按十进制打印一个短字。
D 按十进制打印一个长字。
f 打印单精度的实数。
g 打印一个双精度的实数。
h 按照十六进制打印一个字节。
i 打印机器指令。
lld 打印带符号的 8 字节十进制数。
llu 打印无符号的 8 字节十进制数。
llx 打印无符号的 8 字节十六进制数。
llo 打印无符号的 8 字节八进制数。
o 按八进制打印一个短字。
O 按八进制打印一个长字。
q 打印一个扩展精度的浮点数。
s 打印一个空字节结尾的字符串。
x 按十六进制打印一个短字。
X 按十六进制打印一个长字。
标志
>;File 重定向输出到指定的文件。
示例
要按十六进制显示一个内存起始地址为 0x3fffe460 的一个长字的内容,请输入:
0x3fffe460 / X要按照字符显示起始地址由变量 y 决定的两个字节内存内容,请输入:
&y / 2c要显示 FORTRAN 字符串 a_string 中的第六个到第八个元素,请输入:
&a_string + 5, &a_string + 7/c请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Examining Memory Addresses。
down 子命令
down [ Count ]
down 子命令将当前函数在堆栈中向下移动 Count 级。当前函数用来解析名称。Count 参数的缺省值为 1。
示例
要在堆栈中向下移动一级,请输入:
down要在堆栈中向下移动三级,请输入:
down 3请参阅 up 子命令、where 子命令和 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying a Stack Trace。
dump 子命令
dump [ Procedure ] [ >;File ]
dump 子命令显示指定过程中的所有变量的名称和数值。如果 Procedure 参数为 . (周期),则所有活动的变量将会被显示。如果没有指定 Procedure 参数,则使用当前的过程。如果使用>;File 标志,输出将会重定向到指定的文件。
标志
>;File 重定向输出到指定的文件。
示例
要显示当前过程中的变量的名称和值,请输入:
dump要显示过程 add_count 中的变量的名称和值,请输入:
dump add_count要将当前过程中的变量的名称和值重定向输出到 var.list 文件中,请输入:
dump >; var.list请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying and Modifying Variables。
edit 子命令
edit [ Procedure | File ]
edit 子命令为指定文件启动编辑器。文件可以通过 File 参数或者指定 Procedure 参数来指定,其中编辑器将启动并打开包含该过程的文件中。如果没有指定文件,则编辑器将会根据当前的源文件来调用。缺省值为 vi 编辑器。通过把 EDITOR 环境变量重新设置成您想要的编辑器名称来覆盖缺省值。
示例
要编辑当前源文件,请输入:
edit要编辑 main.c 文件,请输入:
edit main.c要编辑包含在 do_count() 过程中的文件,请输入:
edit do_count参见 list 子命令、vi 或者vedit 命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing the Current File or Procedure 和 Displaying the Current File。
file 子命令
file [ File ]
file 子命令将当前的源文件换成 File 参数指定的文件;它不会写源文件。File 参数可以指定完整的文件的路径。如果 File 参数没有指定路径,dbx 程序通过搜索使用路径试图找到该文件。如果没有指定 File 参数file 子命令将会显示当前的源文件名。如果路径已知,file 子命令还显示文件的完整或者相对路径名。
示例
要将当前源文件换成 main.c 文件中,请输入:
file main.c要显示当前源文件名,请输入:
file参见 func 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing the Current File or Procedure 和 Displaying the Current File。
func 子命令
func [ Procedure ]
func 子命令将当前函数换到由参数 Procedure 指定的程序或函数。如果没有指定 Procedure 参数缺省值为显示当前的函数。改变当前函数将当前源文件换成包含新函数的文件;当前名称解析的作用域也发生了改变。
示例
要将当前的函数换到 do_count 过程,请输入:
func do_count要显示当前函数的名称,请输入:
func参见 file 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing the Current File or Procedure。
goto 子命令
goto SourceLine
goto 子命令使源行成为下一个要运行的行。通常指定的源行必须与当前行在同一函数中。要重设该约束,使用 set 子命令并带有 $unsafegoto 标志。
例子
要使下一个执行的行为第六行,请输入:
goto 6参见 cont 子命令、gotoi 子命令、 以及set 子命令。
gotoi 子命令
gotoi Address
gotoi 子命令修改程序计数器地址为 Address 参数指定的地址。
例子
要修改程序计数器地址为 0x100002b4,请输入:
gotoi 0x100002b4参见 goto 子命令。
help 子命令
help [ Subcommand | Topic ]
根据您指定的参数 help 子命令显示 dbx 子命令或主题的帮助信息。输入 help 子命令并带有 Subcommand 参数显示语法语句和指定子命令的描述。输入 help 子命令并带有 Topic 参数显示指定主题的详细描述。以下是可用的主题:
startup 列出 dbx 启动选项列表。
execution 列出和程序执行相关的 dbx 子命令。
breakpoints 列出和断点和跟踪相关的 dbx 子命令。
files 列出用于访问源文件的 dbx 子命令。
data 列出用于访问程序变量和数据的 dbx 子命令。
machine 列出用于机器级别的调试的 dbx 子命令描述。
environment 列出用于 dbx 的配置和环境设置的 dbx 子命令。
threads 列出 dbx 子命令获得线程相关的对象。
expressions 描述 dbx 表达式语法和运算符。
scope 描述 dbx 如何解析不用作用域的名称。
set_variables 列出 dbx 带有用法说明的调试变量。
usage 列出带有简单描述的 dbx 公共子命令。
示例
要列出所有可用的dbx 子命令和主题,请输入:
帮助要显示dbx 子命令 list的描述,请输入:
help list要显示 dbx 命令的主题 set_variables 的描述,请输入:
help set_variablesignore 子命令
ignore [ SignalNumber | SignalName ]
ignore 子命令在信号送到应用程序之前停止指定信号的捕捉。该子命令在调试应用程序处理例如中断之类的信号时非常有用。
要捕捉的信号可以通过以下任意一项指定:
SignalNumber 参数指定信号数
SignalName 参数指定信号名称
信号名是不区分大小写的。前缀 SIG 是可选的。
如果既没有指定SignalNumber 也没有指定 SignalName 参数,按缺省将捕捉除了 SIGHUP、SIGCLD、SIGALRM 以及 SIGKILL 以外的所有信号。如果 SIGTRAP 信号来自调试器以外的进程,dbx 调试程序无法忽略该信号。如果没有指定参数,将会显示当前所有被忽略的信号的列表。
例子
要使 dbx 忽略发送到应用程序的警报时钟超时信号,请输入:
ignore alrm参见 catch 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Handling Signals。
list 子命令
list [ Procedure | SourceLine-Expression [ ,SourceLine-Expression ] ]
list 子命令显示指定数目的源文件的行。行数由以下两种方法中的一种来指定:
通过使用 Procedure 参数指定一个过程。
在这种情况下,list 子命令显示从指定过程开始前的几行开始直到列表窗口已满。
通过使用SourceLine-Expression参数指定源文件开始和结束行。
SourceLine-Expression 参数由一个有效的行号,加上可选的 +(加号)或 -(减号),以及一个整数组成。另外,SourceLine $(美元符号)可以用来表示当前行号;SourceLine @ (at 符号) 可以用来表示要列出的下一行的行号。
所有在第一个指定的行号和第二个指定的行号之间(包括这两行)的行都将被显示出来。
如果没指定第二个源行,则只打印第一行。
如果 list 子命令没有指定参数,则将从当前源文件的行开始,打印 $listwindow 所指定的行数。
要修改列表行数的默认值,可以设置特定的调试程序变量,$listwindow,为您想要的行数。$listwindow 的初始值为 10。
示例
要列出当前文件中第 1 到第 10 行,请输入:
list 1,10要列出 10 行,或者 $listwindow 行的 main 程序,请输入:
list main要以当前行为中间行,列出前后共 11 行,请输入:
list $-5,$+5您可以在 SourceLineExpression 表达式中使用包括加法和减法在内的简单整数表达式。例如:
(dbx) list $
4 {
(dbx) list 5
5 char i = '4';
(dbx) list sub
23 char *sub(s,a,k)
24 int a;
25 enum status k; . . .
(dbx) move
25
(dbx) list @ -2
23 char *sub(s,a,k)参见 edit 子命令、listi 子命令以及move 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying the Current File。
listi 子命令
listi [ Procedure | at SourceLine | Address [ , Address ] ]
listi 子命令显示源文件指定的指令集合。显示的指令可以通过下列方法指定:
提供 Procedure 参数,其中 listi 子命令将从指定过程开始列出指令列表,直到列表窗口填满为止。
使用at SourceLine 标志,其中 listi 从指定行开始显示指令列表,直到列表窗口被填满为止。SourceLine 变量可以通过一个整数或者一个文件名字符串后跟 :(冒号)和一个整数的方法指定。
通过 Address 参数来指定开始和结束的地址,则两个地址之间(包括这两个地址)所有的指令都将被显示出来。
如果 listi 子命令没有使用标志或参数,则显示下一个 $listwindow 指令。要修改当前列表窗口的大小,可以使用 set $listwindow=Value 子命令。
反汇编方式
dbx 程序可以反汇编 POWER 系列 系列或者 POWER PC 体系结构指令。在默认模式下,dbx 程序显示正在运行的结构的指令。
dbx 命令中的 set 子命令的 $instructionset 以及 $mnemonics 变量在允许您覆盖默认的反汇编方式。要获得更多的信息,请参见dbx 命令中的 set 子命令。
标志
SourceLine 指定了列表的开始命令行。
示例
要列出下 10 条或者 $listwindow 条指令,请输入:
listi要列出第 10 行的机器指令,请输入
listi at 10要列出 sample.c 文件中源代码第 5 行的机器指令,请输入:
listi at "sample.c":5要列出地址位于 0x10000400 和 0x10000420之间的指令,请输入:
listi 0x10000400, 0x10000420参见 list 子命令以及 set 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debuggingat the Machine Level with dbx。
map 子命令
map [ >; File ]
map 子命令显示应用程序中每个装入部分的特征。该信息包括导入的每个装入块的名称、文本来源、文本长度、数据来源以及数据长度。
标志
>;File 重定向输出到指定的文件。
请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debugging at the Machine Level with dbx。
move 子命令
move SourceLine
move 子命令将下一个显示行更换为由 SourceLine 参数指定的行。该子命令修改 @ (at 符号) 变量的值。
SourceLine 变量可以通过一个整数或者在代表文件名的字符串后跟 :(冒号)和一个整数的方法指定。
示例
要想将下一行修改为第 12 行,请输入:
move 12要将下一行修改为文件 sample.c 的第 5 行,请输入:
move "sample.c":5参见 list 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying the Current File。
multproc 子命令
multproc [ on | parent | child | off ]
multproc 子命令指定 dbx 调试程序在创建派生或者越权进程时的行为。on 标志用来指定一个新的 dbx 会话将会被创建以调试派生进程的子路径。原先的dbx 将会继续调试原来的父路径。parent 以及 child 标志用来指定派生进程的单独路径。除了off 的所有标志都能使 dbx 跟随越权进程。off 标志禁用多进程调试。如果没有指定标志,multproc 子命令返回当前调试的多进程的状态。
dbx 程序使用 Xwindows 来进行多进程调试。dbx 程序将会打开足够多的窗口供多进程调试使用。每个子窗口的标题为子进程 ID(pid)。要在进程之间切换,使用 Xwindows 处理技术来激活 dbx 会话显示的窗口。如果系统不支持 Xwindows,在调试派生进程时将会出现一个警告信息而 dbx 程序继续仅调试父进程。多进程调试也可能因如下原因失败:
dbx 程序没有运行在 Xwindows 环境下。
Xwindows 已经运行但是dbx 通用 $xdisplay 变量没有设置一个有效的显示名。$xdisplay 变量被初始化成 shell 的 DISPLAY 环境变量。set 名称 =表达式 dbx 子命令可以用来修改显示名称的值。
/tmp 目录不允许对调试程序进行读写访问。dbx 程序要求在该目录中有小量空间控制 Xwindow 环境。
该系统没有足够的资源满足一个新的 Xwindow 窗口。
$xdisplay 设置成远程显示,用户可能看不见新创建的 Xwindow。如果$xdisplay 设置不正确,Xwindows 或者其他的系统资源将会报告发生错误的原因。
dbx 程序不能区分不同类型错误的区别,但是将会在子命令失败时发送如下的信息:
Warning: dbx subcommand multiproc fails. dbx
continued with multproc disabled.新创建窗口的用户定义的配置可以在 .Xdefaults 文件中由 dbx_term 应用程序名定义。
标志
on 启用多进程调试。
off 禁用多进程调试。
示例
要检查当前多进程的调试状态,请输入:
multproc要启用多进程调试,请输入:
multproc on要禁用多进程调试,请输入:
multproc off 参见screen 子命令以及 fork 子例程。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debugging Programs Involving Multiple Processes。
mutex 子命令
mutex [ lock | unlock | thnum | utid | MutexNumber ... ]
mutex 子命令显示关于互斥的信息。如果给定 MutexNumber参数mutex 子命令将显示指定互斥的信息。如果没有指定标志或者参数,mutex 子命令将会显示所有的互斥信息。
每个互斥信息列出如下:
mutex 指定互斥的符号名,遵循 $mMutexNumber 格式。
type 指出互斥类型:non-rec(非递归),recursi(递归)或者 fast(快速)。
obj_addr 指出互斥的内存地址。
lock 指出互斥的锁定状态:yes 如果互斥已经锁定,no 如果没有锁定。
owner 如果锁定互斥,指出拥有该互斥的用户线程的符号名。
blockers 列出在互斥变量中锁定的用户线程。
注意: dbx 调试程序的 print 子命令识别互斥符号名,然后能用来显示相应对象的状态。
标志
lock 显示关于锁定互斥的信息。
unlock 显示关于未锁定互斥的信息。
thnum 显示特定线程的所有互斥的信息。
utid 显示用户线程 id 与给定用户线程 id 符合的用户线程的所有互斥信息。
示例
要显示所有互斥的信息,请输入:
mutex要显示所有锁定的互斥的信息,请输入:
mutex lock
要显示互斥号为 4、5、6的信息,请输入:
mutex 4 5 6输出类似于:
mutex obj_addr type lock owner blockers
$m4 0x20003274 non-rec no
$m5 0x20003280 recursi no
$m6 0x2000328a fast no要显示所有线程 1 的互斥信息,请输入:
mutex thnum 1要显示线程号为 0x0001 的线程拥有的所有互斥信息,请输入:
mutex utid 0x0001参见attribute 子命令、condition 子命令、print 子命令以及 thread 子命令。
另见AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Mutexes。
next 子命令
next [ Number ]
next 子命令运行应用程序到下一行。Number 参数指定 next 子命令运行的次数。如果没有指定 Number 参数,next 只运行一次。
如果您在多线程应用程序中使用 next 子命令,操作期间运行所有的用户线程,但是该程序继续运行直到运行到指定的行。如果您想单步运行正在运行的线程,使用 set 子命令对 $hold_next 变量进行设置。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
示例
要继续执行到下一源行,请输入:
next要继续执行到当前源行后的第三行,请输入:
next 3请参阅 cont 子命令、goto 子命令、nexti 子命令、set 子命令以及 step 子命令。
nexti 子命令
nexti [ Number ]
nexti 子命令运行应用程序到下一个指令。Number 参数指定nexti 子命令运行的次数。如果没有指定 Number 参数,nexti 只运行一次。
如果您在多线程应用程序中使用 nexti 子命令,所有的用户线程在操作期间都将运行,但是程序将会继续运行直到运行的线程达到指定的机器指令。如果您想单步运行正在运行的线程,使用 set 子命令对 $hold_next变量进行设置。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
示例
要继续执行到下一个机器指令,请输入:
nexti要继续执行到从当前机器指令起的第三个机器指令,请输入:
nexti 3参见gotoi 子命令、next 子命令、set 子命令以及stepi 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Running a Program at the Machine Level。
print 子命令
print 表达式 ...
print Procedure ( [ Parameters ] )
print 子命令打印执行以下任务:
打印由Expression 参数指定的表达式列表的值。
执行 Procedure 参数指定的过程并将过程的返回值打印出来。包括的参数传递给过程。
示例
要显示x 以及 y 左移两位的值,请输入:
print x, y << 2要显示带参数 0 调用 sbrk 例程的返回值,请输入:
print sbrk(0)参见assign 子命令、call 子命令以及 set 子命令。
prompt 子命令
prompt [ "String" ]
prompt 子命令将 dbx 命令的提示符修改为String 参数指定的字符串。
例子
要将提示符修改为 dbx>;,请输入:
prompt "dbx>;"请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Defining a New dbx Prompt。
quit 子命令
quit
quit 子命令结束所有在 dbx 调试对话中的进程。
参见 detach 子命令。
registers 子命令
registers [ >;File ]
registers 子命令显示通用寄存器、系统控制寄存器、浮点数寄存器以及当前指令寄存器的值。
通用寄存器由符号$rNumber 变量表示,其中Number 参数指定寄存器的序号。
注意: 寄存器的值可以设置成十六进制数 0xdeadbeef。十六进制数 0xdeadbeef 是一个在进程初始化时就赋到通用寄存器中的初始值。
浮点寄存器由 $frNumber 变量表示。按照缺省设置,浮点寄存器不会被显示出来。要显示浮点寄存器,使用 unset $noflregs dbx 子命令。
注意:如果当前线程正处于内核模式,registers 子命令将不能显示寄存器。
标志
>;File 重定向输出到指定的文件。
参见set 子命令和 unset 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Machine Registers。
rerun 子命令
rerun [ Arguments ] [ < File ] [ >; File ] [ >; >; File ] [ 2>; File ] [ 2>; >; File ] [ >;& File ] [ >; >;& File ]
rerun 子命令开始目标文件的执行。Arguments 参数将会作为命令行参数传递。如果没有指定 Arguments 参数,最近一次 run 或者 rerun 子命令使用的参数将会被再次使用。
标志
<File 将输入重定向使得从 File文件中获得输入。
>;File 重定向输出到 File文件中。
>; >;File 添加重定向输出到 File 中。
2>;File 将标准错误重定向到 File 中。
2>; >;File 添加重定向标准错误到 File 中。
>;&File 将输出和标准错误重定向到 File 中。
>; >;&File 添加输出和标准错误到 File 中。
参见 run 子命令。
return 子命令
return [ Procedure ]
return 子命令使应用程序执行直到返回到由 Procedure 参数指定的过程。如果没有指定 Procedure 参数,执行将会在当前过程返回时停止。
示例
要继续执行例程的调用,请输入:
return要继续执行至 main 过程,请输入:
return main rwlock 子命令
rwlock [read | write | RwlockNumber....]
rwlock 子命令显示 rwlocks 的信息。如果给定 RwlockNumber 参数,rwlock 子命令将会显示指定 rwlocks 的信息。如果没有指定标志或者参数,rwlock 子命令将会显示所有 rwlocks 的信息。
每个 rwlock 的信息如下:
rwl 设定 rwlock 的符号名称,格式为 $rw RwlockNumber。
flag_value 指出标志的值。
owner 指出 rwlock 的所有者。
status 指出谁拥有该 rwlock。这个值可以是读入(如果由读入者拥有)、写出(如果由写出者拥有)或者空闲(如果空闲)。
wsleep[#] 指出写入的线程阻塞。# 说明写入的线程阻塞的总数。
rsleep[#] 指出读入的线程阻塞。# 说明读入的线程阻塞的总数。
注意: dbx 调试程序的print 子命令识别 rwlock 的符号名称并能用于显示其对应的对象的状态。
标志
read 显示所有处于读状态的 rwlock 的信息。
write 显示所有处于写状态的 rwlock 的信息。
示例
要显示所有 rwlock 的信息,请输入:
rwlock输出类似于:
rwl flag_value owner status
$rwl 1 $t1 write
rsleeps[ 0]:
wsleeps[ 0]:要显示处于写状态的所有 rwlock 的信息,请输入:
rwlock write输出类似于:
rwl flag_value owner status
$rwl 1 $t1 write
rsleeps[ 0]:
wsleeps[ 0]:参见attribute 子命令、condition 子命令、 mutex 子命令、print 子命令以及 thread 子命令。
run 子命令
run [ Arguments ] [ <File ] [ >;File ] [ >; >;File ] [ 2>;File ] [ 2>; >;File ] [ >;&File ] [ >; >;&File ]
run 子命令打开目标文件。Arguments 参数将会作为一个命令行参数使用。
标志
<File 将输入重定向使得从 File文件中获得输入。
>;File 重定向输出到 File文件中。
2>;File 将标准错误重定向到 File 中。
>; >;File 添加重定向输出到 File 中。
2>; >;File 添加重定向标准错误到 File 中。
>;&File 将输出和标准错误重定向到 File 中。
>; >;&File 添加输出和标准错误到 File 中。
例子
要带参数 blue 和 12 运行应用程序,请输入:
run blue 12参见 rerun 子命令。
screen 子命令
screen
screen 子命令为 dbx 命令交互打开一个 Xwindow 窗口。您可以在进程发生的窗口继续操作。
screen 子命令必须在 dbx 调试程序运行在一个 Xwindows 环境下时运行。如果 screen 子命令运行于非 Xwindow 环境下,dbx 程序将会显示一个警告信息并且继续执行调试过程如同没有设定 screen 子命令。screen 子命令也可能在下述情况下失败:
dbx 程序没有运行在 Xwindows 环境下。
Xwindows 已经运行但是dbx 通用 $xdisplay 变量没有设置一个有效的显示名。 $xdisplay 变量被初始化成 DISPLAY 环境变量的值。dbx 子命令 set Name=表达式修改显示名称的值。
Xwindows 正在运行,但是 TERM 环境变量没有设置成一个有效的命令名称以调用新窗口。
/tmp 目录不允许对调试程序进行读写访问。dbx 程序要求在 screen 命令执行时该目录中有小量空间。
该系统没有足够的资源满足一个新的 Xwindow 窗口。
dbx 程序不能区分不同类型错误的区别,但是将会在子命令失败时发送如下的信息:
Warning:dbx subcommand screen fails. dbx
continues.如果$xdisplay 设置成远程显示,用户可能看不见新创建的 Xwindow。如果$xdisplay 设置不正确,Xwindows 或者其他的系统资源将会报告发生该问题。
新创建窗口的用户定义的配置可以在 .Xdefaults 文件中由 dbx_term 应用程序名定义。
示例
要打开一个 dbx 命令交互的 Xwindow 窗口,请输入:
screen请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Separating dbx Output From Program Output 和 AIX 5L Version 5.2 AIXwindows Programming Guide 中的 AIXwindows Overview。
set 子命令
set [ Variable=Expression ]
set 子命令为 dbx 调试程序变量定义一个值。其值由 Expression 参数指定;而程序变量由 Variable 参数指定。变量名不得和正在调试的程序中的使用名称相冲突。在其它命令内部扩展变量至相应的表达式。如果 set 子命令没有参数使用,将会显示当前的变量。
以下变量可以用 set 子命令设置:
$catchbp 在下一个命令执行期间捕捉断点。
$expandunions 显示变体记录或变体联合的每个部分的值。
$frame 使用由 $frame 的值指定的地址所指向的堆栈框架,来执行堆栈跟踪和访问局部变量。
$hexchars 按照十六进制值打印字符。
$hexin 按照十六进制解释地址。
$hexints 按照十六进制数值打印整数。
$hexstrings 按照十六进制打印字符指针。
$hold_next 控制在运行 cont、next、nexti 和 step 子命令时获得除了正在运行线程之外的所有线程。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
$ignoreload 在您运行 load、 unload或者 loadbind 子例程时不会停止。
$instructionset 重设默认反汇编方式。以下列表包含了 Expression 参数可能取的值:
"default"
指定 dbx 程序运行的结构。
"com"
指定 POWER PC 和 POWER 系列体系结构的公共交叉模式的指令集。dbx 程序缺省设置为 基于 POWER 的 助记符。
"pwr"
指定 POWER 系列体系结构的指令集和助记符。
"pwrx"
指定 AIX 5.1 或者更早的 POWER2 实现 POWER 系列体系结构的指令集和助记符。
"601"
指定 AIX 5.1 和更早版本的 PowerPC 601 的指令集和助记符。
"603"
指定 AIX 5.1 和更早版本的 PowerPC 603 的指令集和助记符。
"604"
指定 PowerPC 604 RISC 微处理器 的指令集和助记符。
"ppc"
指定由基于 POWER 体系结构定义的指令集和助记符,除了可选指令。这些指令在所有的基于 POWER 实现的体系中有效,除了 AIX 5.1 或者更早的 PowerPC 601 RISC 微处理器。
"any"
指定任何有效的、基于 POWER 的或 POWER 系列系列的指令。对于重叠的指令,缺省助记符为 基于 POWER 的助记符。
如果没有设置 Expression 参数,dbx 将会使用缺省反汇编方式。
$listwindow 指定一个函数列表的行数以及不加参数使用 list 子命令时的列表的行数。缺省值是 10 行。
$mapaddrs 开始映射地址。取消 $mapaddrs 设置将停止地址映射。
$mnemonics 修改反汇编时 dbx 程序的助记符设置。
"default"
指定最接近指定的指令的助记符。
"pwr"
指定 POWER 系列结构的助记符。
"ppc"
指定 基于 POWER 的结构中定义的助记符,不包括可选指令。
如果没有设置 Expression 参数值dbx 程序将会最接近指定指令集的助记符。
$noargs 省略来自子命令的参数,例如 where、up、down 和 dump。
$noflregs 省略 registers 子命令中浮点寄存器的显示。
$octin 解释八进制的地址。
$octints 打印八进制的整数。
$pretty 与 print 子命令连用,按照 pretty printed 格式显示复杂的 C 及 C++ 数据结构(结构、联合、数组)的值。
"on"
指定值不换行打印、并带有表示值的静态范围的限定名称的美化打印。
"verbose"
指定各自行中每个值的恰当的打印并带有表示值的静态范围的限定名称。一个限定名称包含一个由点隔开与值相关外部块的列表。
"off"
指定关闭恰当打印。此为缺省设置。
$repeat 如果没有输入命令则重复前一个命令。
$sigblock 程序的阻塞信号。
$stepignore 控制在 step 子命令运行某一源行时 dbx 如何动作,该源行调用另一个无调试信息可返回的例程。该变量使得 step 子命令可以跳过大的无法获得调试信息的例程。以下列表包含了 Expression 参数可能取的值:
"function"
执行 dbx 命令的 next 子命令的函数。这是默认值。
"module"
如果函数处于一个装入块中而无法获得调试信息(例如系统库),则执行 next 子命令函数。
"none"
在后台执行 dbx 命令中的 stepi 子命令的函数直到达到源文件信息可得的一条指令。在这一点上 dbx 将会显示运行到哪儿停止了。
$thcomp 当设置了 $thcomp将会按照压缩格式显示线程命令 th- 的显示信息。
$unsafeassign 关闭对 assign 语句两端严格的类型检查语句。即使设置了 $unsafeassign 变量,assign 语句两边也不一定包含不同大小的存储类型。
$unsafebounds 关闭数组的下标检查。
$unsafecall 关闭子例程或者函数调用参数的严格类型检查。
$unsafegoto 关闭 goto 子命令目的地检查。
$vardim 指定在打印未知边界的数组时将使用的维度。缺省值是 10。
$xdisplay 指定显示的 Xwindows 的名称,用于 multproc 或者 screen 子命令。缺省值为 shell DISPLAY 变量的值。
$unsafe 变量限制了 dbx 调试程序在错误检测中的用途。
示例
要修改缺省的列表的行数为 20,请输入:
set $listwindow=20要禁用 assign 子命令的类型检查,请输入:
set $unsafeassign要使用 AIX 5.1 或者更早的 PowerPC 601 RISC 微处理器的反汇编机器指令,请输入:
set $instructionset="601"参见 unset 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing Print Output with Special Debug Program Variables。
set edit [vi, emacs] 或 set -o [vi, emacs] 子命令
set 子命令带有 -o 或者 edit 选项可以用来打开某一行编辑模式。如果给出了 set-o vi 或者 set edit vi 命令,您将处于 vi 行编辑器的输入模式。如果给了 set -o emacs 或者 set edit emacs 命令,您将处于 emacs 行编辑器的输入模式。
示例
要打开 vi 行编辑器,请输入:
set-o vi或
set edit vish 子命令
sh [ Command ]
sh 子命令将 Command 参数指定的命令传递到 shell 执行。SHELL 环境变量决定使用哪个 shell。缺省值为 sh shell。如果没有指定参数,将把控制权交给 shell。
示例
要运行 ls 命令,请输入:
sh ls要进入 shell,请输入:
sh要使用 SHELL 环境变量,请输入:
sh echo $SHELL请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Running Shell Commands from dbx。
skip 子命令
skip [ Number ]
skip 子命令从当前的停止点继续执行程序。数目等于 Number 参数的值的断点将会被跳过并将在下一个断点处或者程序结束时停止执行。如果没有指定 Number 参数,缺省值为 1。
示例
要继续执行程序直到遇到第二个断点,请输入:
skip 1也可参见 cont 子命令。
source 子命令
source File
source 子命令从File参数指定的文件读入 dbx 子命令。
示例
要从 cmdfile 文件中读 dbx 子命令,请输入:
source cmdfile请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Reading dbx Subcommands from a File。
status 子命令
status [ >;File ]
status 子命令显示当前活动的 trace 和 stop 子命令。>; 标志将 status 子命令的输出送到由 File 参数指定的文件当中。
标志
>;File 重定向输出到 File文件中。
参见 dbx 命令的 clear 子命令、delete 子命令、stop 子命令、trace 子命令。
另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
step 子命令
step [ Number ]
step 子命令运行应用程序源命令行。通过 Number 参数指定执行的行数。如果省略了 Number 参数,缺省值为 1。
如果在多线程应用程序中使用 step 子命令,操作期间所有的用户线程都将运行,但是程序继续执行直到运行线程达到指定的源程序行。如果您想单步运行正在运行的线程,使用 set 子命令对 $hold_next变量进行设置。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
注意: 使用set 子命令的 $stepignore 变量来控制 step 子命令的行为。 $stepignore 变量使 step 子命令单步跳过大的无法获得调试信息的例程。
示例
要继续执行一个源程序行,请输入:
step要继续执行五行,请输入:
step 5要防止 dbx 程序单步执行 printf 函数,如下述示例代码所述:
60 printf ("hello world \n");请输入:
set $stepignore="function"; step参见
dbx是通过交互执行dbx子命令来达到调试的目的的。
在调试程序前,必须先将-g选项包含在编译信息中,编译生成带调试信息的文件,即:cc -o filename -g file.c。
进入dbx通常只需输入"dbx filename"即可,filename为待调试的可执行程序名。
dbx加载后就显示提示符:(dbx),此时用户就可以输入dbx子命令进行调试了。
下面是一些dbx的常用子命令:
1.基本操作命令
run arg1 arg2 ... :以arg1,arg2,...为参数开始运行现有进程。
r:用上次使用的参数再次运行现有进程。
source filename:从文件名为filename的文件中读入dbx子命令并执行。
return:执行完目前的进程后返回。
sh command:不退出dbx,执行一条操作系统shell命令。
sh:暂时进入shell状态。
quit:退出dbx,若程序未执行完则终止其执行。
2.置断点与跟踪点命令
stop var at n:置断点命令,当第n行的变量var发生变化时将程序挂起。
stop var in proc:置断点命令,当过程proc的变量var发生变化时将程序挂起。
stop at n:置断点命令,当执行到第n行时将程序挂起。
stop in proc:置断点命令,当执行到过程proc时将程序挂起。
trace var at n:置跟踪点命令,当第n行的变量var改变时显示跟踪信息。
trace var in proc:置跟踪点命令,当过程proc的变量var改变时显示跟踪信息。
trace n:置跟踪点命令,当执行到第n行时显示被跟踪信息。
trace proc:置跟踪点命令,当执行到过程proc时显示被跟踪信息。
trace eXPr at n:置跟踪点命令,当执行到第n行时显示var的值。
delete nall:删除第n行的/所有的断点与跟踪点。
3.调试命令
cont at n:运行直至第n行。
print var:打印变量var的值。
printf "string",expr,...:以C语言的格式打印。
where:打印当前调试状态,包括当前进程的信息。
func:查看当前运行的进程名。
func proc:移至到调用proc进程的母进程处。
whatis name:显示对变量名或过程名name的类型。
step [n]:单步执行一行或n行,碰到线程调用时进入线程调用。
next [n]:单步执行一行或n行,碰到线程调用时拒绝进入线程调用。
skip [n]:跳过一个或n个断点,继续往下执行
dump [proc] [>file]:显示当前或proc过程的所有变量名及其值
assign var=expr:给变量var赋以表达式expr的值
4.读取被调试程序命令
list:列出从当前行开始的若干行源程序。
list n,m:列出从第n行到第m行的源程序。
/string:朝文件尾方向查找字符串string
?string:朝文件头方向查找字符串string
file filename:将查看的文件切换到文件filename处
基本的几个命令:
dbx *.out
dbx>stop at ***.cpp:123 (文件加行号)
dbx>stop in *** (函数名)
dbx>ignore SIGUSR2 RTMINT+5 RTMINT+6
dbx>run
dbx>cont
dbx>next
[精华] dbx 命令命令详解[转贴]
http://www.chinaunix.net 作者:li2002 发表于:2008-05-18 13:46:39
【发表评论】 【查看原文】 【C/C++讨论区】【关闭】
dbx 命令
用途
提供了一个调试和运行程序的环境。
语法
dbx [ -a ProcessID ] [ -c CommandFile ] [ -d NestingDepth ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:...| pathfile ] [ -k ] [ -u ] [ -F ] [ -r ] [ -x ] [ ObjectFile [ CoreFile ] ]
描述
dbx 命令为 C、C++、Pascal 和 FORTRAN 语言程序提供了一个符号性的调试程序,允许您按照下面的内容执行操作:
检验对象和核心文件。
为程序运行提供一个控制环境。
在选中的语句处设置断点或单步执行程序。
使用符号变量进行调试并将它们以正确的格式显示出来。
ObjectFile 参数是一个由编译器产生的目标(可执行)文件。在编译您的程序时,使用 -g(生成符号表)标志产生 dbx 命令需要的信息。
注:cc 命令的 -g 标志应该在对象文件进行编译时使用。如果没有使用 -g 标志或者如果符号引用被 strip 命令从 xcoff 文件中删除了,则 dbx 命令的符号性能将受到限制。
如果没有指定 -c 标志,dbx 命令将会在用户的 $HOME 目录中检查 .dbxinit 文件。然后它在用户当前目录中检查 .dbxinit 文件。如果在当前目录中存在一个 .dbxinit文件,该文件将覆盖用户的 $HOME 目录中的 .dbxinit 文件。如果在发现了 .dbxinit 文件存在于用户的 $HOME 目录中或者当前目录中,该文件的子命令将在调试部分开始时运行。使用编辑器创建一个 .dbxinit 文件。
如果没有指定 ObjectFile,那么 dbx 将询问要进行检查的目标文件的名称。缺省值是 a.out。如果当前目录中存在 core 文件或者指定了 CoreFile 参数,那么 dbx 将报告程序发生错误的位置。保留在核心映像中的变量、寄存器和内存可以被检查直到开始执行 ObjectFile。那时 dbx 调试程序提示输入命令。
表达式句柄
dbx 程序可以显示各种各样的表达式。您可以在 dbx 调试程序中使用 C 和 Pascal 语法的公共子集和一些 FORTRAN 扩展的子集来指定表达式。
以下运算符在调试程序中是有效的:
*(星号)或者 ^ (脱字符号) 表示正在取消引用间接寻址或者指针。
[ ](方括号)或者( )(圆括号) 表示数组表达式的下标。
. (句点) 通过指针和结构来使用该字段引用运算符。这将使得 C 运算符 ->;(箭头)变得没有必要,尽管它仍允许使用。
&(与符号) 获得变量的地址。
.. (两个句点) 在指定数组子部分时将上下界分开。例如:n[1..4]。
以下类型的运算在调试程序的表达式中是有效的:
代数运算 =、-、*、/(浮点运算的除法)、div(整数运算的除法)、mod 和 exp(乘幂运算)。
按位运算 -, I, bitand, xor, ~, << 和 >;>;
逻辑运算 or、and、not、II 和 &&
比较运算 <、>;、<=、>;=、< >; 或 !=、= 或 ==
其它 (类型名),sizeof
逻辑和比较表达式在 stop 和 trace 中作为条件使用的。
检验表达式类型。您可以通过重命名或者重载运算符的方式重设一个表达式类型。三种重命名的格式分别是:类型名(表达式),表达式 |类型名以及 (类型名)表达式。以下是一个示例,其中 x 变量是一个值为 97 的整数:
(dbx) print x
97
(dbx) print char (x), x \ char, (char) x, x
'a' 'a' 'a' 97命令行编辑
dbx 命令提供一种命令行编辑功能类似于由 Korn Shell 提供的功能。vi 模式提供 类似 vi 的编辑功能,而 emacs 模式赋予您类似于 emacs 的控制功能。
这些功能可以通过使用 dbx 子命令 set -o 或者 set edit 来开启。要打开 vi 风格的命令行编辑,您可以输入子命令 set edit vi 或者 set -o vi。
您也可以使用 EDITOR 环境变量来设置编辑模式。
dbx 命令将保存输入到历史文件 .dbxhistory 当中的命令。如果没有设置 DBXHISTFILE 环境变量,使用的历史文件是 $HOME/.dbxhistory。
按照缺省值,dbx 将保存最近输入的 128 个命令。DBXHISTSIZE 环境变量可以从来增加这一限制。
标志
-a ProcessID 将调试程序和正在运行的进程连接起来。为了连接调试程序,您需要拥有对该进程使用 kill 命令的权限。使用 ps 命令来决定进程的 ID。如果您获得许可,dbx 程序中断该进程,决定目标文件的完整名称,读入符号信息和提示输入命令。
-c CommandFile 读入标准输入之前,在文件中运行 dbx 子命令。$HOME 目录中指定的文件将首先被处理;然后处理当前目录中的文件。当前目录中的命令文件将会覆盖 $HOME 目录中的命令文件。如果指定的文件既不存在于 $HOME 目录也不存在于当前目录,将会显示警告消息。source 子命令可以在 dbx 程序运行后使用。
-d NestingDepth 设置程序块的嵌套限制。缺省的嵌套深度限制为 25。
-E DebugEnvironment 指定调试程序的环境变量。
-p oldpath=newpath:...| pathfile 以 oldpath=newpath 的格式在检查核心文件时指定替换的库的路径。oldpath 指定了将被替换的值(存储在核心文件中)而 newpath 指定了将要替换的新的值。这些可能是全部或者部分的,绝对路径或者相对路径。可以指定若干个替换,它们之间用冒号隔开。相反 -p 标志可以指定文件名,映射以前读入的描述格式。每行中只允许有一个映射从文件中读出。
-F 可以用来关闭缓慢读入模式并使 dbx 命令在启动时就读入全部符号。缺省情况下,缓慢读入模式是打开的:它在 dbx 会话初始化时读入需要的符号表信息。。在该模式下,dbx 将不会读入那些符号信息尚未被读入的变量和类型。因此,诸如 whereis i 等命令并不列出在所有函数中的变量 i 的全部实例。
-I Directory (大写 i)将 Directory 变量指定的目录包含到搜索源文件目录列表中。搜索源文件的缺省目录为:
文件编译时该源文件所在的目录。只有编译器设置了对象中的源路径时才能搜索目录。
当前目录。
当前程序所在的目录。
-k 映射内存地址;这对于内核调试是非常有用的。
-r 立即运行对象文件。如果它成功结束,dbx 调试程序将会退出。否则,将会进入调试程序并报告中断的原因。
注意:除非指定了 -r,dbx 命令将会提示用户并等待命令输入。
-u 让 dbx 命令为文件名加上 @ (at 符号) 前缀。该标志减少符号名混淆的可能性。
-x 防止 dbx 命令跳过来自于 FORTRAN 源代码的 _(下划线)字符。该符号允许 dbx 在符号之间区别哪些除了下划线以外都是相同的,例如 xxx 和xxx_。
示例
下列示例解释如何在启动 dbx 调试程序时同时启动一个进程。本例使用了一个名为 samp.c 的程序。该 C 程序首先经过 -g 标志的编译生成一个包含符号列表引用的目标文件。在此情况下,该程序命名为:samp:
$ cc -g samp.c -o sampsamp 程序运行后,操作系统会报告一个总线错误并将核心映像写入到您当前的工作目录当中,如下所示:
$ samp
Bus Error - core dumped要确定发生错误的位置,请输入:
$ dbx samp系统将会返回如下信息:
dbx version 3.1
Type 'help' for help.
reading symbolic information . . . [
using memory image in core]
25 x = 0;
(dbx) quit该示例解释了如何将 dbx 连接到进程当中去。该示例使用了如下程序 looper.c:
main()
{
int i,x[10];
for (i = 0; i < 10;);
}该程序将不会中止因为 i 不会增加。使用 -g 标志编译 looper.c 得到符号调试能力:
$ cc -g looper.c -o looper在命令行中运行 looper 并执行以下步骤就会在它运行的时候将 dbx 连接到程序中去:
要将 dbx 连接到 looper,您必须确定进程的 ID。如果您没有运行 looper 作为后台程序,您必须启动另外一个 Xwindow 窗口。在该 Xwindow 窗口中,输入:
ps -u UserID其中 UserID 是您的登录标识。所有属于您的活动的进程将会显示如下:
PID TTY TIME COMMAND
68 console 0:04 sh
467 lft3 10:48 looper在该示例中和 looper 相关的进程 ID 是 467。
要将 dbx 连接到 looper中,请输入:
$ dbx -a 467系统将返回如下的信息:
Waiting to attach to process 467 . . .
Successfully attached to /tmp/looper.
dbx is initializing
Type 'help' for help.
reading symbolic information . . .
attached in main at line 5
5 for (i = 0; i < 10;);
(dbx) 现在您可以查询并调试进程如同该程序最初就是由 dbx 来启动的。
要将目录添加到搜索可执行文件 objefile 的源文件的目录清单中,可以输入:
$dbx -I /home/user/src -I /home/group/src
objfileuse 子命令可以在 dbx 启动之后用来实现此功能。use 命令重新设置目录清单而 -I 标志则向清单中添加目录。
要使用 -r 标志,输入:
$ dbx -r samp 系统将会返回如下信息:
Entering debug program . . .
dbx version 3.1
Type 'help' for help.
reading symbolic information . . .
bus error in main at line 25
25 x = 0;
(dbx) quit-r 标志允许您在尽管没有设置核心映像的情况下在内存中检查您的进程的状态。
要指定调试程序的环境变量,输入:
dbx -E LIBPATH=/home/user/lib -E LANG=Ja_JP objfiledbx 子命令
注意:这些子命令只能在运行 dbx 调试程序时使用。
/ 在当前源文件中向前搜索某种模式。
? 在当前源文件中向后搜索某种模式。
alias(别名) 创建 dbx 子命令的别名。
assign(赋值) 为一个变量赋值。
attribute(属性) 显示所有或者选中属性对象的信息。
call(调用) 运行与指定的过程或函数相关的对象代码。
case(格式) 修改 dbx 调试程序解释符号的方式。
catch(捕捉) 在一个信号送到应用程序之前启动捕获这个信号。
clear(清除) 删除所有源指定行的停止线。
cleari 除去地址中所有的断点。
condition(条件) 显示全部或者选中的条件变量的信息。
cont 从当前停止点继续应用程序的执行直到程序终止或者遇到下一个断点。
delete(删除) 删除与指定事件数对应的跟踪和停止线。
detach(拆分) 继续应用程序的执行并退出调试程序。
display memory(显示内存) 显示内存中的内容。
down(降下) 将当前函数在堆栈中向下移动。
dump(转存) 显示指定过程中的变量的名称和值。
edit(编辑) 启动编辑器编辑指定文件。
file(文件) 将当前源文件修改成指定的文件。
func(函数) 将当前函数修改成指定的过程或者函数。
goto(跳转到) 使指定行成为下一个运行的行。
gotoi 修改程序计数器地址。
help(帮助) 显示 dbx 子命令或主题的帮助信息。
ignore(忽略) 在一个信号送到应用程序之前停止捕获这个信号。
list(列表) 显示当前源文件的行。
listi 列出应用程序的指令清单。
map(映射) 显示关于应用程序装入特征的信息。
move(移动) 跳到下一行并显示。
multproc(多线程) 启用或禁用多线程调试。
mutex(互斥) 显示全部或者选中的互斥信息。
next(下一个) 运行应用程序直到下一个源程序行。
nexti 运行应用程序直到下一个机器指令。
print(打印) 打印表达式的值或运行一个过程并打印过程的返回代码。
prompt(提示符) 修改 dbx 命令提示符。
quit(退出) 停止 dbx 调试程序。
registers(寄存器) 显示所有通用寄存器、系统控制寄存器、浮点寄存器和当前指令寄存器的值。
rerun(重新运行) 按照以前设置的参数开始运行应用程序。
return(返回) 继续应用程序的运行直到达到返回一个指定的过程。
rwlock 显示 rwlocks 的信息。
run(运行) 开始运行一个应用程序。
screen(屏幕) 打开一个 Xwindow 作为 dbx 命令的交互。
set(设置) 为 dbx 调试程序变量定义一个值。
sh 传递命令到 shell 去运行。
skip(跳过) 从当前的停止处继续运行应用程序。
source(源) 从文件中读入 dbx 子命令。
status(状态) 显示活动的跟踪和停止子命令。
step(单步) 运行一个源命令行。
stepi 运行一个机器指令。
stophwp 设置一个硬件的观察点停止。
stop(停止) 停止运行应用程序。
stopi 在指定位置设置停止点。
thread(线程) 显示和控制线程。
trace(跟踪) 打印跟踪信息。
tracehwp 设置硬件观察点跟踪。
tracei 打开跟踪。
unalias(取消别名) 删除别名。
unset(取消设置) 删除一个变量。
up(上升) 将当前函数在堆栈中向上移动。
use(使用) 设置在搜索源文件时要搜索的目录列表。
whatis 显示应用程序组件的声明。
where 显示活动过程和函数的清单。
whereis 显示所有名字匹配指定标识符的符号的全限定。
which 显示给定标识符的全限定。
/ 子命令
/ [ RegularExpression [ / ] ]
/ 子命令在当前源文件中向前搜索由 RegularExpression 参数指定的模式。不带参数输入 / 子命令将会使 dbx 命令向前搜索以前的正则表达式。搜索将会在文件的结尾折返。
示例
要向前搜索当前源文件中 12 这个数字,请输入:
/ 12要重复以前的搜索,请输入:
/请参阅 ?(搜索)子命令和 regcmp 子例程。
? 子命令
? [ RegularExpression [ ? ] ]
? 子命令在当前源文件中向后搜索由 RegularExpression 参数指定的模式。不带参数输入 ? 子命令将会使 dbx 命令向后搜索以前的正则表达式。搜索将会在文件的结尾折返。
示例
要向后搜索当前源文件中的 z 字符,请输入:
?z要重复以前的搜索,请输入:
?参见 / (搜索)子命令和 regcmp 子例程。
alias 子命令
alias [ Name [ [ (Arglist) ] String | Subcommand ] ]
alias 子命令为 dbx 子命令创建别名。Name 参数是要创建的别名。String 参数是 dbx 子命令的序列,在执行完该子命令后可以通过 Name 引用这些序列。如果 alias 子命令没有指定参数,它将显示所有当前的别名。
示例
要用 rr 替换 rerun,请输入:
alias rr rerun要在命令行输入 printandstep 时运行 print n 和 step 两个子命令,输入:
alias printandstep "print n; step"alias 子命令也可以用作一个有限的宏工具。例如:
(dbx) alias px(n) "set $hexints; print n; unset $hexints"
(dbx) alias a(x,y) "print symname[x]->;symvalue._n_n.name.Id[y]"
(dbx) px(126)
0x7e在本示例中,别名 px 打印了一个十六进制的值而不会永久影响到调试环境。
assign 子命令
assign Variable =Expression
assign 子命令分配由 Expression 参数指定的值到 Variable 参数指定的变量当中去。
示例
要将数值 5 分配到 x 变量中,请输入:
assign x = 5要将变量 y 的值分配到变量 x 中,请输入:
assign x = y要将字符值 'z' 分配到变量 z 中,请输入:
assign z = 'z'要将布尔值 false 分配到逻辑类型变量 B 中,请输入:
assign B = false要将字符串 "Hello World" 分配到字符指针 Y 中,请输入:
assign Y = "Hello World"要禁用类型检查,将 dbx 调试程序变量 $unsafeassign 进行设置,输入:
set $unsafeassign参见 Displaying and Modifying Variables。
attribute 子命令
attribute [ AttributeNumber ... ]
attribute 子命令显示关于 AttributeNumber 参数定义的用户线程、互斥或者条件属性对象的相关信息。如果没有指定参数,将会列出所有的属性对象。
对于列出的每个属性对象,将会显示如下信息:
attr 按照 $aAttributeNumber 格式指出属性对象的符号名。
obj_addr 指出属性对象的地址。
type 指出属性对象的类型;对于用户线程、互斥以及条件变量的类型分别是 thr、mutex 或者 cond。
state 指出属性对象的状态。该状态可能是 valid 或者 inval。
stack 指出一个线程属性对象的堆栈大小属性。
scope 指出线程属性对象的作用域属性。这将决定线程的争用域并定义必须争用进程资源的线程的集合。对于系统或者进程争用域,作用域的值可以是 sys 或者 pro。
prio 指出线程属性对象的优先级属性。
sched 指出一个线程属性对象的调度策略属性。该属性控制了调度策略,可选的值为 fifo、rr(循环法)或者 other。
p-shar 指定互斥或者条件属性对象的进程共享属性。如果可以由不同进程的线程访问,该互斥或者条件是进程共享的。该属性值可以是 yes 或者 no。
protocol 指出互斥的协议属性。该属性决定了保持线程优先级互斥的作用。可选的值有 no_prio、prio 或者 protect。
注意:
dbx 调试程序的 print 子命令可以识别符号属性名称并可以用来显示相应对象的状态。
可用的属性取决于 POSIX 选项的实现。
示例
要列出所有的属性的信息,请输入:
attribute输出类似于:
attr obj_addr type state stack scope prio
sched p-shar
$a1 0x200035c8 mutex valid no
$a2 0x20003628 cond valid no
$a3 0x200037c8 thr valid 57344 sys 126 other
$a4 0x200050f8 thr valid 57344 pro 126 other
要列出属性 1 和 3 的信息,请输入:
attribute 1 3
输出类似于:
attr obj_addr type state stack scope prio
sched p-shar
$a1 0x200035c8 mutex valid no
$a3 0x200037c8 thr valid 57344 sys 126 other
参见 dbx 命令中 condition 子命令、mutex 子命令、 print 子命令和 thread 子命令。
另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Creating Threads、Using Mutexes 和 Using Condition Variables。
call 子命令
call Procedure ( [ Parameters ] )
call 子命令运行由 Procedure 参数指定的过程。返回代码不会打印出来。如果指定了参数,它们将传给正在运行的过程。
例子
运行 dbx 时要调用一个命令,请输入:
(dbx) call printf("hello")
helloprintf 成功返回。
case 子命令
case [ default | mixed | lower | upper ]
case 子命令修改 dbx 调试程序解释符号的方式。缺省的符号处理视当前使用的语言而定。如果当前的语言是 C、C++ 或者没有定义,这些符号将不会合并;如果当前的语言是 FORTRAN 或者 Pascal,这些符号就会合并成小写格式。如果符号需要使用与当前语言不一致的方法解释,则使用该子命令。
不带参数输入 case 子命令将会显示当前的 case 模式。
标志
default 随当前语言变化。
mixed 按实际显示的情况解释符号。
lower 按小写来解释符号。
upper 按大写来解释符号。
示例
要显示当前的大小写模式,请输入:
case要指示 dbx 命令按照符号实际形式解释符号,请输入:
case mixed要指示 dbx 按照大写形式解释符号,请输入:
case upper参见 Folding Variables to Lowercase and Uppercase。
catch 子命令
catch [ SignalNumber | SignalName ]
catch 子命令在信号送到应用程序之前启动捕获这个信号。该子命令在被调试的应用程序处理诸如中断之类的信号时非常有用。待捕获的信号可以分别用 SignalNumber 参数按号码或者用 SignalName 参数按名称来指定。信号名是不区分大小写的,而前缀 SIG 是可选的。如果既没有指定 SignalNumber 也没有指定 SignalName 参数,则将缺省捕获除了 SIGHUP、SIGCLD、SIGALARM 和 SIGKILL 之外的所有信号。如果没有指定参数,将显示当前能够捕获的信号的列表。
示例
要显示当前能够被 dbx 捕获的信号的列表,请输入:
catch要捕获 SIGALARM 信号,请输入:
catch SIGALARM参见ignore 子命令和信号处理。
clear 子命令
clear SourceLine
clear 子命令删除所有给定源文件行的停止。SourceLine 参数可以按照两种格式指定:
当作一个整数
当作一个文件名字符串,后面跟一个:(冒号)和一个整数
示例
要删除第 19 行中设置的断点,请输入:
clear 19参见 cleari 子命令和 delete 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
cleari 子命令
cleari Address
cleari 子命令清除由 Address 参数指定的地址的所有断点。
示例
要删除设置在地址 0x100001b4处的断点,请输入:
cleari 0x100001b4要删除设置在 main() 过程地址处的断点,输入:
cleari &main请参阅 clear 子命令、delete 子命令和 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
condition 子命令
condition [ wait | nowait | ConditionNumber ... ]
condition 子命令显示一个或多个条件变量的相关信息。如果指定了一个或多个 ConditionNumber 参数,condition 子命令将会显示指定条件变量的信息。如果没有指定标志或者参数,condition 子命令列出所有条件变量的清单。
各个条件的信息列表如下:
cv 按照 $cConditionNumber 的格式指出条件变量的符号名称。
obj_addr 设定条件变量的内存地址。
num_wait 设定条件变量中等待的线程的数量。
waiters 列出等待条件变量的用户线程。
注意: dbx 调试程序的print 子命令识别符号条件变量名称并用来显示相应对象的状态。
标志
wait 显示有等待线程的条件变量。
nowait 显示没有等待线程的条件变量。
示例
要显示关于所有条件变量的信息,请输入:
condition要显示有等待线程的条件变量的信息,请输入:
condition wait
要显示关于条件变量 3 的信息,请输入:
condition 3类似的输出为:
cv obj_addr num_wait waiters
$c3 0x20003290 0参见 attribute 子命令、mutex 子命令、print 子命令以及thread 子命令。
另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Condition Variables。
cont 子命令
cont [ SignalNumber | SignalName ]
cont 子命令从当前的断点开始继续执行应用程序直到该程序结束或者遇到另外一个断点。如果通过 SignalNumber 参数(指定信号数)或者 SignalName 参数(指定信号名),该程序将假定已经收到该信号并继续执行。信号名不区分大小写并且其前缀 SIG 是可选的。如果没有指定信号,该程序将如同没有停止下来过一样继续执行。
示例
要从当前断点位置继续执行程序,请输入:
cont要如同收到 SIGQUIT 信号一样继续执行程序,请输入:
cont SIGQUIT请参阅 dbx 命令的 detach 子命令、dbx 的 goto子命令、dbx 的 next 子命令、dbx 的 skip 子命令、dbx 的 step 子命令。
delete 子命令
delete { Number ... | all }
delete 子命令从应用程序中删除跟踪和停止。可以通过 Number 参数来删除指定跟踪和停止,或者通过 all 标志来删除所有跟踪和停止。使用 status 子命令来显示 dbx 调试程序为跟踪和停止生成的相应跟踪号和停止号。
标志
all 删除所有的跟踪和停止。
示例
要从应用程序中删除所有的跟踪和停止,请输入:
delete all要删除事件号为 4 的跟踪和停止,请输入:
delete 4请参阅 clear 子命令、cleari 子命令、status 子命令和 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
detach 子命令
detach [ SignalNumber | SignalName ]
detach 子命令将继续应用程序的执行并退出调试程序。信号可以通过以下任意一项指定:
名称,使用SignalName 参数
序号,使用SignalNumber 参数
信号名不区分大小写而且前缀 SIG 是可选的。
如果指定了信号,程序将如同接收到该信号一样继续执行。如果没有指定信号,该程序将如同没有停止下来过一样继续执行。
示例
要退出 dbx而继续执行应用程序,请输入:
detach要退出 dbx 并如同收到 SIGREQUEST 信号那样继续执行程序,请输入:
detach SIGREQUEST参见 Using dbx Debug Program。
display memory 子命令
{ Address,Address/ | Address/ [ Count ] } [ Mode ] [ >;File ]
不带任何关键字进行初始化的 display memory 子命令将显示由如下因素控制的内存的部分内容:
显示内存的范围是由下面两种方法之一指定的:
两个 Address 参数,则这两个地址之间的内容都将显示出来,
或者
一个 Address 参数指定显示起始地址以及一个 Count 参数指定从 Address 开始显示的行数。
在名称之前加上一个 &(与符号)指定符号地址。地址可以是其它地址和 +(加号)、 -(减号)以及 *(间接乘法)运算组成的表达式。任何包含在括号中间的表达式都将认为是一个地址。
显示内存的格式是由 Mode 参数控制的。Mode 参数的缺省值为当前模式。 Mode 参数的初始值为 X。可能存在的模式包括:
b 打印八进制的字节。
c 按字符打印一个字节。
d 按十进制打印一个短字。
D 按十进制打印一个长字。
f 打印单精度的实数。
g 打印一个双精度的实数。
h 按照十六进制打印一个字节。
i 打印机器指令。
lld 打印带符号的 8 字节十进制数。
llu 打印无符号的 8 字节十进制数。
llx 打印无符号的 8 字节十六进制数。
llo 打印无符号的 8 字节八进制数。
o 按八进制打印一个短字。
O 按八进制打印一个长字。
q 打印一个扩展精度的浮点数。
s 打印一个空字节结尾的字符串。
x 按十六进制打印一个短字。
X 按十六进制打印一个长字。
标志
>;File 重定向输出到指定的文件。
示例
要按十六进制显示一个内存起始地址为 0x3fffe460 的一个长字的内容,请输入:
0x3fffe460 / X要按照字符显示起始地址由变量 y 决定的两个字节内存内容,请输入:
&y / 2c要显示 FORTRAN 字符串 a_string 中的第六个到第八个元素,请输入:
&a_string + 5, &a_string + 7/c请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Examining Memory Addresses。
down 子命令
down [ Count ]
down 子命令将当前函数在堆栈中向下移动 Count 级。当前函数用来解析名称。Count 参数的缺省值为 1。
示例
要在堆栈中向下移动一级,请输入:
down要在堆栈中向下移动三级,请输入:
down 3请参阅 up 子命令、where 子命令和 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying a Stack Trace。
dump 子命令
dump [ Procedure ] [ >;File ]
dump 子命令显示指定过程中的所有变量的名称和数值。如果 Procedure 参数为 . (周期),则所有活动的变量将会被显示。如果没有指定 Procedure 参数,则使用当前的过程。如果使用>;File 标志,输出将会重定向到指定的文件。
标志
>;File 重定向输出到指定的文件。
示例
要显示当前过程中的变量的名称和值,请输入:
dump要显示过程 add_count 中的变量的名称和值,请输入:
dump add_count要将当前过程中的变量的名称和值重定向输出到 var.list 文件中,请输入:
dump >; var.list请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying and Modifying Variables。
edit 子命令
edit [ Procedure | File ]
edit 子命令为指定文件启动编辑器。文件可以通过 File 参数或者指定 Procedure 参数来指定,其中编辑器将启动并打开包含该过程的文件中。如果没有指定文件,则编辑器将会根据当前的源文件来调用。缺省值为 vi 编辑器。通过把 EDITOR 环境变量重新设置成您想要的编辑器名称来覆盖缺省值。
示例
要编辑当前源文件,请输入:
edit要编辑 main.c 文件,请输入:
edit main.c要编辑包含在 do_count() 过程中的文件,请输入:
edit do_count参见 list 子命令、vi 或者vedit 命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing the Current File or Procedure 和 Displaying the Current File。
file 子命令
file [ File ]
file 子命令将当前的源文件换成 File 参数指定的文件;它不会写源文件。File 参数可以指定完整的文件的路径。如果 File 参数没有指定路径,dbx 程序通过搜索使用路径试图找到该文件。如果没有指定 File 参数file 子命令将会显示当前的源文件名。如果路径已知,file 子命令还显示文件的完整或者相对路径名。
示例
要将当前源文件换成 main.c 文件中,请输入:
file main.c要显示当前源文件名,请输入:
file参见 func 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing the Current File or Procedure 和 Displaying the Current File。
func 子命令
func [ Procedure ]
func 子命令将当前函数换到由参数 Procedure 指定的程序或函数。如果没有指定 Procedure 参数缺省值为显示当前的函数。改变当前函数将当前源文件换成包含新函数的文件;当前名称解析的作用域也发生了改变。
示例
要将当前的函数换到 do_count 过程,请输入:
func do_count要显示当前函数的名称,请输入:
func参见 file 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing the Current File or Procedure。
goto 子命令
goto SourceLine
goto 子命令使源行成为下一个要运行的行。通常指定的源行必须与当前行在同一函数中。要重设该约束,使用 set 子命令并带有 $unsafegoto 标志。
例子
要使下一个执行的行为第六行,请输入:
goto 6参见 cont 子命令、gotoi 子命令、 以及set 子命令。
gotoi 子命令
gotoi Address
gotoi 子命令修改程序计数器地址为 Address 参数指定的地址。
例子
要修改程序计数器地址为 0x100002b4,请输入:
gotoi 0x100002b4参见 goto 子命令。
help 子命令
help [ Subcommand | Topic ]
根据您指定的参数 help 子命令显示 dbx 子命令或主题的帮助信息。输入 help 子命令并带有 Subcommand 参数显示语法语句和指定子命令的描述。输入 help 子命令并带有 Topic 参数显示指定主题的详细描述。以下是可用的主题:
startup 列出 dbx 启动选项列表。
execution 列出和程序执行相关的 dbx 子命令。
breakpoints 列出和断点和跟踪相关的 dbx 子命令。
files 列出用于访问源文件的 dbx 子命令。
data 列出用于访问程序变量和数据的 dbx 子命令。
machine 列出用于机器级别的调试的 dbx 子命令描述。
environment 列出用于 dbx 的配置和环境设置的 dbx 子命令。
threads 列出 dbx 子命令获得线程相关的对象。
expressions 描述 dbx 表达式语法和运算符。
scope 描述 dbx 如何解析不用作用域的名称。
set_variables 列出 dbx 带有用法说明的调试变量。
usage 列出带有简单描述的 dbx 公共子命令。
示例
要列出所有可用的dbx 子命令和主题,请输入:
帮助要显示dbx 子命令 list的描述,请输入:
help list要显示 dbx 命令的主题 set_variables 的描述,请输入:
help set_variablesignore 子命令
ignore [ SignalNumber | SignalName ]
ignore 子命令在信号送到应用程序之前停止指定信号的捕捉。该子命令在调试应用程序处理例如中断之类的信号时非常有用。
要捕捉的信号可以通过以下任意一项指定:
SignalNumber 参数指定信号数
SignalName 参数指定信号名称
信号名是不区分大小写的。前缀 SIG 是可选的。
如果既没有指定SignalNumber 也没有指定 SignalName 参数,按缺省将捕捉除了 SIGHUP、SIGCLD、SIGALRM 以及 SIGKILL 以外的所有信号。如果 SIGTRAP 信号来自调试器以外的进程,dbx 调试程序无法忽略该信号。如果没有指定参数,将会显示当前所有被忽略的信号的列表。
例子
要使 dbx 忽略发送到应用程序的警报时钟超时信号,请输入:
ignore alrm参见 catch 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Handling Signals。
list 子命令
list [ Procedure | SourceLine-Expression [ ,SourceLine-Expression ] ]
list 子命令显示指定数目的源文件的行。行数由以下两种方法中的一种来指定:
通过使用 Procedure 参数指定一个过程。
在这种情况下,list 子命令显示从指定过程开始前的几行开始直到列表窗口已满。
通过使用SourceLine-Expression参数指定源文件开始和结束行。
SourceLine-Expression 参数由一个有效的行号,加上可选的 +(加号)或 -(减号),以及一个整数组成。另外,SourceLine $(美元符号)可以用来表示当前行号;SourceLine @ (at 符号) 可以用来表示要列出的下一行的行号。
所有在第一个指定的行号和第二个指定的行号之间(包括这两行)的行都将被显示出来。
如果没指定第二个源行,则只打印第一行。
如果 list 子命令没有指定参数,则将从当前源文件的行开始,打印 $listwindow 所指定的行数。
要修改列表行数的默认值,可以设置特定的调试程序变量,$listwindow,为您想要的行数。$listwindow 的初始值为 10。
示例
要列出当前文件中第 1 到第 10 行,请输入:
list 1,10要列出 10 行,或者 $listwindow 行的 main 程序,请输入:
list main要以当前行为中间行,列出前后共 11 行,请输入:
list $-5,$+5您可以在 SourceLineExpression 表达式中使用包括加法和减法在内的简单整数表达式。例如:
(dbx) list $
4 {
(dbx) list 5
5 char i = '4';
(dbx) list sub
23 char *sub(s,a,k)
24 int a;
25 enum status k; . . .
(dbx) move
25
(dbx) list @ -2
23 char *sub(s,a,k)参见 edit 子命令、listi 子命令以及move 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying the Current File。
listi 子命令
listi [ Procedure | at SourceLine | Address [ , Address ] ]
listi 子命令显示源文件指定的指令集合。显示的指令可以通过下列方法指定:
提供 Procedure 参数,其中 listi 子命令将从指定过程开始列出指令列表,直到列表窗口填满为止。
使用at SourceLine 标志,其中 listi 从指定行开始显示指令列表,直到列表窗口被填满为止。SourceLine 变量可以通过一个整数或者一个文件名字符串后跟 :(冒号)和一个整数的方法指定。
通过 Address 参数来指定开始和结束的地址,则两个地址之间(包括这两个地址)所有的指令都将被显示出来。
如果 listi 子命令没有使用标志或参数,则显示下一个 $listwindow 指令。要修改当前列表窗口的大小,可以使用 set $listwindow=Value 子命令。
反汇编方式
dbx 程序可以反汇编 POWER 系列 系列或者 POWER PC 体系结构指令。在默认模式下,dbx 程序显示正在运行的结构的指令。
dbx 命令中的 set 子命令的 $instructionset 以及 $mnemonics 变量在允许您覆盖默认的反汇编方式。要获得更多的信息,请参见dbx 命令中的 set 子命令。
标志
SourceLine 指定了列表的开始命令行。
示例
要列出下 10 条或者 $listwindow 条指令,请输入:
listi要列出第 10 行的机器指令,请输入
listi at 10要列出 sample.c 文件中源代码第 5 行的机器指令,请输入:
listi at "sample.c":5要列出地址位于 0x10000400 和 0x10000420之间的指令,请输入:
listi 0x10000400, 0x10000420参见 list 子命令以及 set 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debuggingat the Machine Level with dbx。
map 子命令
map [ >; File ]
map 子命令显示应用程序中每个装入部分的特征。该信息包括导入的每个装入块的名称、文本来源、文本长度、数据来源以及数据长度。
标志
>;File 重定向输出到指定的文件。
请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debugging at the Machine Level with dbx。
move 子命令
move SourceLine
move 子命令将下一个显示行更换为由 SourceLine 参数指定的行。该子命令修改 @ (at 符号) 变量的值。
SourceLine 变量可以通过一个整数或者在代表文件名的字符串后跟 :(冒号)和一个整数的方法指定。
示例
要想将下一行修改为第 12 行,请输入:
move 12要将下一行修改为文件 sample.c 的第 5 行,请输入:
move "sample.c":5参见 list 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Displaying the Current File。
multproc 子命令
multproc [ on | parent | child | off ]
multproc 子命令指定 dbx 调试程序在创建派生或者越权进程时的行为。on 标志用来指定一个新的 dbx 会话将会被创建以调试派生进程的子路径。原先的dbx 将会继续调试原来的父路径。parent 以及 child 标志用来指定派生进程的单独路径。除了off 的所有标志都能使 dbx 跟随越权进程。off 标志禁用多进程调试。如果没有指定标志,multproc 子命令返回当前调试的多进程的状态。
dbx 程序使用 Xwindows 来进行多进程调试。dbx 程序将会打开足够多的窗口供多进程调试使用。每个子窗口的标题为子进程 ID(pid)。要在进程之间切换,使用 Xwindows 处理技术来激活 dbx 会话显示的窗口。如果系统不支持 Xwindows,在调试派生进程时将会出现一个警告信息而 dbx 程序继续仅调试父进程。多进程调试也可能因如下原因失败:
dbx 程序没有运行在 Xwindows 环境下。
Xwindows 已经运行但是dbx 通用 $xdisplay 变量没有设置一个有效的显示名。$xdisplay 变量被初始化成 shell 的 DISPLAY 环境变量。set 名称 =表达式 dbx 子命令可以用来修改显示名称的值。
/tmp 目录不允许对调试程序进行读写访问。dbx 程序要求在该目录中有小量空间控制 Xwindow 环境。
该系统没有足够的资源满足一个新的 Xwindow 窗口。
$xdisplay 设置成远程显示,用户可能看不见新创建的 Xwindow。如果$xdisplay 设置不正确,Xwindows 或者其他的系统资源将会报告发生错误的原因。
dbx 程序不能区分不同类型错误的区别,但是将会在子命令失败时发送如下的信息:
Warning: dbx subcommand multiproc fails. dbx
continued with multproc disabled.新创建窗口的用户定义的配置可以在 .Xdefaults 文件中由 dbx_term 应用程序名定义。
标志
on 启用多进程调试。
off 禁用多进程调试。
示例
要检查当前多进程的调试状态,请输入:
multproc要启用多进程调试,请输入:
multproc on要禁用多进程调试,请输入:
multproc off 参见screen 子命令以及 fork 子例程。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debugging Programs Involving Multiple Processes。
mutex 子命令
mutex [ lock | unlock | thnum | utid | MutexNumber ... ]
mutex 子命令显示关于互斥的信息。如果给定 MutexNumber参数mutex 子命令将显示指定互斥的信息。如果没有指定标志或者参数,mutex 子命令将会显示所有的互斥信息。
每个互斥信息列出如下:
mutex 指定互斥的符号名,遵循 $mMutexNumber 格式。
type 指出互斥类型:non-rec(非递归),recursi(递归)或者 fast(快速)。
obj_addr 指出互斥的内存地址。
lock 指出互斥的锁定状态:yes 如果互斥已经锁定,no 如果没有锁定。
owner 如果锁定互斥,指出拥有该互斥的用户线程的符号名。
blockers 列出在互斥变量中锁定的用户线程。
注意: dbx 调试程序的 print 子命令识别互斥符号名,然后能用来显示相应对象的状态。
标志
lock 显示关于锁定互斥的信息。
unlock 显示关于未锁定互斥的信息。
thnum 显示特定线程的所有互斥的信息。
utid 显示用户线程 id 与给定用户线程 id 符合的用户线程的所有互斥信息。
示例
要显示所有互斥的信息,请输入:
mutex要显示所有锁定的互斥的信息,请输入:
mutex lock
要显示互斥号为 4、5、6的信息,请输入:
mutex 4 5 6输出类似于:
mutex obj_addr type lock owner blockers
$m4 0x20003274 non-rec no
$m5 0x20003280 recursi no
$m6 0x2000328a fast no要显示所有线程 1 的互斥信息,请输入:
mutex thnum 1要显示线程号为 0x0001 的线程拥有的所有互斥信息,请输入:
mutex utid 0x0001参见attribute 子命令、condition 子命令、print 子命令以及 thread 子命令。
另见AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Mutexes。
next 子命令
next [ Number ]
next 子命令运行应用程序到下一行。Number 参数指定 next 子命令运行的次数。如果没有指定 Number 参数,next 只运行一次。
如果您在多线程应用程序中使用 next 子命令,操作期间运行所有的用户线程,但是该程序继续运行直到运行到指定的行。如果您想单步运行正在运行的线程,使用 set 子命令对 $hold_next 变量进行设置。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
示例
要继续执行到下一源行,请输入:
next要继续执行到当前源行后的第三行,请输入:
next 3请参阅 cont 子命令、goto 子命令、nexti 子命令、set 子命令以及 step 子命令。
nexti 子命令
nexti [ Number ]
nexti 子命令运行应用程序到下一个指令。Number 参数指定nexti 子命令运行的次数。如果没有指定 Number 参数,nexti 只运行一次。
如果您在多线程应用程序中使用 nexti 子命令,所有的用户线程在操作期间都将运行,但是程序将会继续运行直到运行的线程达到指定的机器指令。如果您想单步运行正在运行的线程,使用 set 子命令对 $hold_next变量进行设置。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
示例
要继续执行到下一个机器指令,请输入:
nexti要继续执行到从当前机器指令起的第三个机器指令,请输入:
nexti 3参见gotoi 子命令、next 子命令、set 子命令以及stepi 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Running a Program at the Machine Level。
print 子命令
print 表达式 ...
print Procedure ( [ Parameters ] )
print 子命令打印执行以下任务:
打印由Expression 参数指定的表达式列表的值。
执行 Procedure 参数指定的过程并将过程的返回值打印出来。包括的参数传递给过程。
示例
要显示x 以及 y 左移两位的值,请输入:
print x, y << 2要显示带参数 0 调用 sbrk 例程的返回值,请输入:
print sbrk(0)参见assign 子命令、call 子命令以及 set 子命令。
prompt 子命令
prompt [ "String" ]
prompt 子命令将 dbx 命令的提示符修改为String 参数指定的字符串。
例子
要将提示符修改为 dbx>;,请输入:
prompt "dbx>;"请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Defining a New dbx Prompt。
quit 子命令
quit
quit 子命令结束所有在 dbx 调试对话中的进程。
参见 detach 子命令。
registers 子命令
registers [ >;File ]
registers 子命令显示通用寄存器、系统控制寄存器、浮点数寄存器以及当前指令寄存器的值。
通用寄存器由符号$rNumber 变量表示,其中Number 参数指定寄存器的序号。
注意: 寄存器的值可以设置成十六进制数 0xdeadbeef。十六进制数 0xdeadbeef 是一个在进程初始化时就赋到通用寄存器中的初始值。
浮点寄存器由 $frNumber 变量表示。按照缺省设置,浮点寄存器不会被显示出来。要显示浮点寄存器,使用 unset $noflregs dbx 子命令。
注意:如果当前线程正处于内核模式,registers 子命令将不能显示寄存器。
标志
>;File 重定向输出到指定的文件。
参见set 子命令和 unset 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Machine Registers。
rerun 子命令
rerun [ Arguments ] [ < File ] [ >; File ] [ >; >; File ] [ 2>; File ] [ 2>; >; File ] [ >;& File ] [ >; >;& File ]
rerun 子命令开始目标文件的执行。Arguments 参数将会作为命令行参数传递。如果没有指定 Arguments 参数,最近一次 run 或者 rerun 子命令使用的参数将会被再次使用。
标志
<File 将输入重定向使得从 File文件中获得输入。
>;File 重定向输出到 File文件中。
>; >;File 添加重定向输出到 File 中。
2>;File 将标准错误重定向到 File 中。
2>; >;File 添加重定向标准错误到 File 中。
>;&File 将输出和标准错误重定向到 File 中。
>; >;&File 添加输出和标准错误到 File 中。
参见 run 子命令。
return 子命令
return [ Procedure ]
return 子命令使应用程序执行直到返回到由 Procedure 参数指定的过程。如果没有指定 Procedure 参数,执行将会在当前过程返回时停止。
示例
要继续执行例程的调用,请输入:
return要继续执行至 main 过程,请输入:
return main rwlock 子命令
rwlock [read | write | RwlockNumber....]
rwlock 子命令显示 rwlocks 的信息。如果给定 RwlockNumber 参数,rwlock 子命令将会显示指定 rwlocks 的信息。如果没有指定标志或者参数,rwlock 子命令将会显示所有 rwlocks 的信息。
每个 rwlock 的信息如下:
rwl 设定 rwlock 的符号名称,格式为 $rw RwlockNumber。
flag_value 指出标志的值。
owner 指出 rwlock 的所有者。
status 指出谁拥有该 rwlock。这个值可以是读入(如果由读入者拥有)、写出(如果由写出者拥有)或者空闲(如果空闲)。
wsleep[#] 指出写入的线程阻塞。# 说明写入的线程阻塞的总数。
rsleep[#] 指出读入的线程阻塞。# 说明读入的线程阻塞的总数。
注意: dbx 调试程序的print 子命令识别 rwlock 的符号名称并能用于显示其对应的对象的状态。
标志
read 显示所有处于读状态的 rwlock 的信息。
write 显示所有处于写状态的 rwlock 的信息。
示例
要显示所有 rwlock 的信息,请输入:
rwlock输出类似于:
rwl flag_value owner status
$rwl 1 $t1 write
rsleeps[ 0]:
wsleeps[ 0]:要显示处于写状态的所有 rwlock 的信息,请输入:
rwlock write输出类似于:
rwl flag_value owner status
$rwl 1 $t1 write
rsleeps[ 0]:
wsleeps[ 0]:参见attribute 子命令、condition 子命令、 mutex 子命令、print 子命令以及 thread 子命令。
run 子命令
run [ Arguments ] [ <File ] [ >;File ] [ >; >;File ] [ 2>;File ] [ 2>; >;File ] [ >;&File ] [ >; >;&File ]
run 子命令打开目标文件。Arguments 参数将会作为一个命令行参数使用。
标志
<File 将输入重定向使得从 File文件中获得输入。
>;File 重定向输出到 File文件中。
2>;File 将标准错误重定向到 File 中。
>; >;File 添加重定向输出到 File 中。
2>; >;File 添加重定向标准错误到 File 中。
>;&File 将输出和标准错误重定向到 File 中。
>; >;&File 添加输出和标准错误到 File 中。
例子
要带参数 blue 和 12 运行应用程序,请输入:
run blue 12参见 rerun 子命令。
screen 子命令
screen
screen 子命令为 dbx 命令交互打开一个 Xwindow 窗口。您可以在进程发生的窗口继续操作。
screen 子命令必须在 dbx 调试程序运行在一个 Xwindows 环境下时运行。如果 screen 子命令运行于非 Xwindow 环境下,dbx 程序将会显示一个警告信息并且继续执行调试过程如同没有设定 screen 子命令。screen 子命令也可能在下述情况下失败:
dbx 程序没有运行在 Xwindows 环境下。
Xwindows 已经运行但是dbx 通用 $xdisplay 变量没有设置一个有效的显示名。 $xdisplay 变量被初始化成 DISPLAY 环境变量的值。dbx 子命令 set Name=表达式修改显示名称的值。
Xwindows 正在运行,但是 TERM 环境变量没有设置成一个有效的命令名称以调用新窗口。
/tmp 目录不允许对调试程序进行读写访问。dbx 程序要求在 screen 命令执行时该目录中有小量空间。
该系统没有足够的资源满足一个新的 Xwindow 窗口。
dbx 程序不能区分不同类型错误的区别,但是将会在子命令失败时发送如下的信息:
Warning:dbx subcommand screen fails. dbx
continues.如果$xdisplay 设置成远程显示,用户可能看不见新创建的 Xwindow。如果$xdisplay 设置不正确,Xwindows 或者其他的系统资源将会报告发生该问题。
新创建窗口的用户定义的配置可以在 .Xdefaults 文件中由 dbx_term 应用程序名定义。
示例
要打开一个 dbx 命令交互的 Xwindow 窗口,请输入:
screen请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Separating dbx Output From Program Output 和 AIX 5L Version 5.2 AIXwindows Programming Guide 中的 AIXwindows Overview。
set 子命令
set [ Variable=Expression ]
set 子命令为 dbx 调试程序变量定义一个值。其值由 Expression 参数指定;而程序变量由 Variable 参数指定。变量名不得和正在调试的程序中的使用名称相冲突。在其它命令内部扩展变量至相应的表达式。如果 set 子命令没有参数使用,将会显示当前的变量。
以下变量可以用 set 子命令设置:
$catchbp 在下一个命令执行期间捕捉断点。
$expandunions 显示变体记录或变体联合的每个部分的值。
$frame 使用由 $frame 的值指定的地址所指向的堆栈框架,来执行堆栈跟踪和访问局部变量。
$hexchars 按照十六进制值打印字符。
$hexin 按照十六进制解释地址。
$hexints 按照十六进制数值打印整数。
$hexstrings 按照十六进制打印字符指针。
$hold_next 控制在运行 cont、next、nexti 和 step 子命令时获得除了正在运行线程之外的所有线程。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
$ignoreload 在您运行 load、 unload或者 loadbind 子例程时不会停止。
$instructionset 重设默认反汇编方式。以下列表包含了 Expression 参数可能取的值:
"default"
指定 dbx 程序运行的结构。
"com"
指定 POWER PC 和 POWER 系列体系结构的公共交叉模式的指令集。dbx 程序缺省设置为 基于 POWER 的 助记符。
"pwr"
指定 POWER 系列体系结构的指令集和助记符。
"pwrx"
指定 AIX 5.1 或者更早的 POWER2 实现 POWER 系列体系结构的指令集和助记符。
"601"
指定 AIX 5.1 和更早版本的 PowerPC 601 的指令集和助记符。
"603"
指定 AIX 5.1 和更早版本的 PowerPC 603 的指令集和助记符。
"604"
指定 PowerPC 604 RISC 微处理器 的指令集和助记符。
"ppc"
指定由基于 POWER 体系结构定义的指令集和助记符,除了可选指令。这些指令在所有的基于 POWER 实现的体系中有效,除了 AIX 5.1 或者更早的 PowerPC 601 RISC 微处理器。
"any"
指定任何有效的、基于 POWER 的或 POWER 系列系列的指令。对于重叠的指令,缺省助记符为 基于 POWER 的助记符。
如果没有设置 Expression 参数,dbx 将会使用缺省反汇编方式。
$listwindow 指定一个函数列表的行数以及不加参数使用 list 子命令时的列表的行数。缺省值是 10 行。
$mapaddrs 开始映射地址。取消 $mapaddrs 设置将停止地址映射。
$mnemonics 修改反汇编时 dbx 程序的助记符设置。
"default"
指定最接近指定的指令的助记符。
"pwr"
指定 POWER 系列结构的助记符。
"ppc"
指定 基于 POWER 的结构中定义的助记符,不包括可选指令。
如果没有设置 Expression 参数值dbx 程序将会最接近指定指令集的助记符。
$noargs 省略来自子命令的参数,例如 where、up、down 和 dump。
$noflregs 省略 registers 子命令中浮点寄存器的显示。
$octin 解释八进制的地址。
$octints 打印八进制的整数。
$pretty 与 print 子命令连用,按照 pretty printed 格式显示复杂的 C 及 C++ 数据结构(结构、联合、数组)的值。
"on"
指定值不换行打印、并带有表示值的静态范围的限定名称的美化打印。
"verbose"
指定各自行中每个值的恰当的打印并带有表示值的静态范围的限定名称。一个限定名称包含一个由点隔开与值相关外部块的列表。
"off"
指定关闭恰当打印。此为缺省设置。
$repeat 如果没有输入命令则重复前一个命令。
$sigblock 程序的阻塞信号。
$stepignore 控制在 step 子命令运行某一源行时 dbx 如何动作,该源行调用另一个无调试信息可返回的例程。该变量使得 step 子命令可以跳过大的无法获得调试信息的例程。以下列表包含了 Expression 参数可能取的值:
"function"
执行 dbx 命令的 next 子命令的函数。这是默认值。
"module"
如果函数处于一个装入块中而无法获得调试信息(例如系统库),则执行 next 子命令函数。
"none"
在后台执行 dbx 命令中的 stepi 子命令的函数直到达到源文件信息可得的一条指令。在这一点上 dbx 将会显示运行到哪儿停止了。
$thcomp 当设置了 $thcomp将会按照压缩格式显示线程命令 th- 的显示信息。
$unsafeassign 关闭对 assign 语句两端严格的类型检查语句。即使设置了 $unsafeassign 变量,assign 语句两边也不一定包含不同大小的存储类型。
$unsafebounds 关闭数组的下标检查。
$unsafecall 关闭子例程或者函数调用参数的严格类型检查。
$unsafegoto 关闭 goto 子命令目的地检查。
$vardim 指定在打印未知边界的数组时将使用的维度。缺省值是 10。
$xdisplay 指定显示的 Xwindows 的名称,用于 multproc 或者 screen 子命令。缺省值为 shell DISPLAY 变量的值。
$unsafe 变量限制了 dbx 调试程序在错误检测中的用途。
示例
要修改缺省的列表的行数为 20,请输入:
set $listwindow=20要禁用 assign 子命令的类型检查,请输入:
set $unsafeassign要使用 AIX 5.1 或者更早的 PowerPC 601 RISC 微处理器的反汇编机器指令,请输入:
set $instructionset="601"参见 unset 子命令。另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Changing Print Output with Special Debug Program Variables。
set edit [vi, emacs] 或 set -o [vi, emacs] 子命令
set 子命令带有 -o 或者 edit 选项可以用来打开某一行编辑模式。如果给出了 set-o vi 或者 set edit vi 命令,您将处于 vi 行编辑器的输入模式。如果给了 set -o emacs 或者 set edit emacs 命令,您将处于 emacs 行编辑器的输入模式。
示例
要打开 vi 行编辑器,请输入:
set-o vi或
set edit vish 子命令
sh [ Command ]
sh 子命令将 Command 参数指定的命令传递到 shell 执行。SHELL 环境变量决定使用哪个 shell。缺省值为 sh shell。如果没有指定参数,将把控制权交给 shell。
示例
要运行 ls 命令,请输入:
sh ls要进入 shell,请输入:
sh要使用 SHELL 环境变量,请输入:
sh echo $SHELL请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Running Shell Commands from dbx。
skip 子命令
skip [ Number ]
skip 子命令从当前的停止点继续执行程序。数目等于 Number 参数的值的断点将会被跳过并将在下一个断点处或者程序结束时停止执行。如果没有指定 Number 参数,缺省值为 1。
示例
要继续执行程序直到遇到第二个断点,请输入:
skip 1也可参见 cont 子命令。
source 子命令
source File
source 子命令从File参数指定的文件读入 dbx 子命令。
示例
要从 cmdfile 文件中读 dbx 子命令,请输入:
source cmdfile请参阅 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Reading dbx Subcommands from a File。
status 子命令
status [ >;File ]
status 子命令显示当前活动的 trace 和 stop 子命令。>; 标志将 status 子命令的输出送到由 File 参数指定的文件当中。
标志
>;File 重定向输出到 File文件中。
参见 dbx 命令的 clear 子命令、delete 子命令、stop 子命令、trace 子命令。
另见 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。
step 子命令
step [ Number ]
step 子命令运行应用程序源命令行。通过 Number 参数指定执行的行数。如果省略了 Number 参数,缺省值为 1。
如果在多线程应用程序中使用 step 子命令,操作期间所有的用户线程都将运行,但是程序继续执行直到运行线程达到指定的源程序行。如果您想单步运行正在运行的线程,使用 set 子命令对 $hold_next变量进行设置。设置该变量将可能导致死锁,因为运行中的线程可能等待某个阻塞的线程拥有的锁。
注意: 使用set 子命令的 $stepignore 变量来控制 step 子命令的行为。 $stepignore 变量使 step 子命令单步跳过大的无法获得调试信息的例程。
示例
要继续执行一个源程序行,请输入:
step要继续执行五行,请输入:
step 5要防止 dbx 程序单步执行 printf 函数,如下述示例代码所述:
60 printf ("hello world \n");请输入:
set $stepignore="function"; step参见
相关推荐
### Solaris DBX 使用说明详解 #### 一、DBX简介与入门 DBX是Sun Microsystems为Solaris操作系统设计的一款强大的交互式调试器,适用于C、C++和Fortran等语言编写的应用程序。通过DBX,开发者能够有效地定位并解决...
在Unix系统中,尤其是Sun Microsystems的Solaris平台上,DBX是一个广泛使用的调试工具,它为C、C++和Fortran等语言的程序提供了强大的调试功能。本文档旨在为用户提供关于如何使用DBX进行程序调试的详细指导。 ####...
- **dbx** 是Sun Microsystems为Solaris操作系统提供的一个强大的程序调试工具。它主要用于Unix系统下的程序调试,能够帮助开发者有效地定位和修复程序中的错误。 #### 二、dbx入门 - **编译调试代码** - 在使用...
dbx是Solaris平台下开发者的重要工具,通过熟练掌握其使用方法,可以极大地提高软件开发和维护的效率。无论是初学者还是有经验的开发者,都应充分利用dbx提供的各种功能,确保代码的质量和稳定性。
- **dbx** 是Oracle Solaris Studio 12.3中的一款强大的调试工具,主要用于调试C/C++和Fortran应用程序。 - **主要功能** 包括但不限于:启动程序、设置断点、单步执行、查看调用堆栈、检查变量状态、查找内存访问...
在IT行业中,mdb和dbx是两种非常重要的调试工具,主要应用于UNIX和类UNIX系统,尤其是Sun Solaris操作系统。这两个工具对于系统管理员和开发者来说,是诊断和解决系统及应用程序问题的关键。 mdb(Solaris Debugger...
DBX还可以与其他Solaris工具(如`truss`和`pstack`)结合使用,提供更深入的系统级调试能力。 在IBM的AIX操作系统中,虽然主要使用的是RDi(Rational Developer for i)这样的集成开发环境,但DBX依然可用,特别是...
在Unix、Linux以及Solaris等操作系统中,dbx是一款强大的命令行源码级调试器,被广泛用于调试C、C++等语言编写的程序。本文将详细介绍如何使用dbx进行程序调试。 一、dbx简介 dbx是一款功能丰富的调试器,支持动态...
DBX是一款在Sun Microsystems的Solaris操作系统上广泛使用的命令行调试器,它提供了丰富的功能来帮助程序员深入理解程序执行的过程,从而找到并解决代码中的问题。 DBX的核心特性包括: 1. **源代码级调试**:DBX...
使用dbx调试时,程序员应该已经具备对Solaris操作系统和UNIX命令的基本了解和理解。该调试工具提供的手册是一个全面的调试指南,旨在帮助程序员使用dbx命令来调试应用程序。此外,手册还提供了如何使用Sun WorkShop ...
Solaris 操作系统提供了多种内存检测方法,其中之一是使用 dbx 工具中的 Runtime Checking(RTC)模块。RTC 模块不仅可以检测内存泄漏,还可以检测内存访问和使用问题。 RTC 模块的使用需要满足一些前提条件,例如...
- **应用程序打包**:Solaris 10 使用 `pkgadd` 和 `pkginfo` 等工具进行软件包管理,而 Linux 则使用 `rpm` 或 `dpkg`。这些工具在打包格式、依赖关系管理和安装过程上都有所不同。 #### 开发工具 - **Linux 工具...
- **dbx** 和 **gdb**:调试工具,用于调试程序。 - **prof** 和 **gprof**:性能分析工具,帮助开发者优化程序性能。 #### 文件I/O操作 Solaris支持标准的文件I/O操作,如打开文件(`open()`)、读写文件(`read...
### sun-dbx命令详解 #### 概述 Sun-Dbx 是 Sun Microsystems 提供的一个功能强大的调试工具,主要用于调试 C 和 C++ 程序。它不仅适用于 Solaris 平台,也支持其他 ...希望本文能帮助读者更好地理解和使用 Sun-Dbx。
它在Solaris操作系统上广泛使用,为程序员提供了深入理解代码执行过程和定位错误的能力。本中文用户手册是SUN公司专门为DBX用户提供的指导资料,旨在帮助用户更高效地使用这个工具。 在《DBX中文用户手册》中,你将...
dbx是一款强大的命令行调试工具,广泛应用于Unix和类Unix系统,如Solaris、HP-UX等。这份手册详细介绍了如何使用dbx来诊断和修复代码中的问题,提升软件开发和维护的效率。 首先,dbx的基本操作是其核心内容。手册...
《Sun Studio调试手册》主要聚焦于使用dbx这一强大的调试工具来帮助开发者深入理解并解决程序中的问题。dbx是Sun Microsystems(现Oracle)开发的一个源码级调试器,广泛应用于Solaris操作系统上的C、C++及Fortran等...