dbx是UNIX下基于命令行界面的程序调试器,如果不能学会dbx,无疑将为你在UNIX端的编程上增添许多的困难。
dbx是通过交互执行dbx子命令来达到调试的目的的。
在调试程序前,必须先将-g选项包含在编译信息中,编译生成带调试信息的文件,即:cc -o filename -gfile.c。
进入dbx通常只需输入"dbx filename"即可,filename为待调试的可执行程序名。
dbx加载后就显示提示符:(dbx),此时用户就可以输入dbx子命令进行调试了。
------------------------------------------------------------------------------
*****************************************************************************
最常使用的命令
$dbx
(dbx)run——运行可执行二进制文件
(dbx)list——列出代码
(dbx)step——跳转到下一步执行,遇到线程调用时进入线程调用。
(dbx)next——跳转到下一步执行,遇到线程调用时拒绝进入线程调用。
(dbx)print —打印输出值
(dbx)stop at ——设置断点
(dbx)cont——继续执行
(dbx)cont at ——继续执行指定行
(dbx)call——调用func()
(dbx)delete ——删除断点
(dbx)quit——退出执行
==================================================
1. 编译时必须加上-g.
2. 过程
$cc -g numbers.c -o numbers
$dbx numbers---numbers为生成的二进制文件
(dbx)run//(运行程序)执行上句进入的文件即numbers
***显示输出***
(dbx)list
***输出代码***
(dbx)stop at 8 //断点设置在第8行
(dbx)status
(3) stop at 8 --这里输出前面的数字为断点号(breakpoint number)
(dbx) delete 3取消断点
**************************************************************************
------------------------------------------------------------------------
下面是一些dbx的常用子命令:
1.基本操作命令
run arg1 arg2 ... :以arg1,arg2,...为参数开始运行现有进程。
r:用上次使用的参数再次运行现有进程。
source filename:从文件名为filename的文件中读入dbx子命令并执行。
return:执行完目前的进程后返回。
sh command:不退出dbx,执行一条操作系统shell命令。
sh:暂时进入shell状态。
ctrl+d:推出shell状态,回到dbx
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 n|all:删除第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处。