dbx是unix下普遍的源码调试工具,
掌握好了dbx的使用,无疑象增添了泥在unix下编程的一把利器
查找了一下整个unix板精华区,都没有发现有dbx的介绍文档,
大概各位大侠都对这个土土的东东都不愿浪费笔墨巴
研究了一下午dbx的连机文档,发现dbx很是简单易用
现在简单介绍一下dbx的使用方法,让更多的朋友免去独自研究的苦楚
dbx主要用来调试用f77或cc等编译工具生成的fortran和c语言的源代码
当然该程序必须在调试过程中用-g参数包含入调试信息,比方说
我在unix下编写了一个hello.c的程序:
void hello();
main
{
int i,j;
i=1;
j=2;
i=i+1;
hello();
printf("%d,%d/n",i,j);
}
void hello()
{
printf("hello");
}
先用cc -o helloexe -g hello.c编译生成带调试信息的helloexe文件
然后用dbx helloexe来调试该文件
显示dbx)这个dbx下调试的提示符
现在泥还不处在调试状态下,需要首先进入调试状态,
这样泥需要先确定从哪里开始第一次中断,以便以后的跟踪调试
这里从第7行开始调试,用命令:
dbx)stop at 7
设置好断点后就开始运行;
dbx)run
这时程序运行到第7行停止下来,
并显示下一行将要执行的程序7: i=i+1
这时,泥可以用:
dbx)print i命令来查看i变量的值
显示
1
或者用printf "%d",i来显示用c语言格式的输出
对以后比较负责的数组什么的,用
dbx)duel i方式可能更加显示的方便
以后
泥可以用
dbx)step或者 step ==trace into
dbx)next来执行下一行程序,next=trace over
用dbx)cont命令可以直接运行到结束,
其中控制命令多多,功能十分强大的.
查看源码可以用
dbx)list begin,end
就显示hello.c文件中从begin到end行的所有程序,并且配上了行号
用dbx)file <filename>可以改变泥要查看的源码文件名称.
enjor it!
下面是查看了 dbx 的 man 手册后对一些常用 / 使用命令的中文说明
这些命令对普通的调试已经足够了 , 一些多线程的调试命令就不加以介绍了
dbx 使用指南 :
1: 实用命令
quit/q 退出
q 退出
run arg1 arg2 ... 用参数运行现有进程
r 用上次的参数再次运行
stop at <line> 在第 line 行设断点
stop at <proc> 在过程 proc 被调用处设断点
cont <singal> 继续运行到记号 ( 断点或其他 ) 处
return 执行完目前的进程返回
print <exp> ... 打印表达式的值
printf "string",exp,... 用 c 语言的格式打印结果
where 打印当前调试状态 , 包括当前进程等信息
func <proc> 看当前运行进程名 / 移动到调用 proc 进程的母进程处
file <file> 查看的文件切换到 file 文件处
list <exp1>,<exp2> 从 file 文件中列出从 exp1 行到 exp2 行
list <exp>:<int> 列出 file 文件中从 exp 行开始的 int 行
whatis <variable> 显示变量的类型
sh 崭时进入 sh 状态
sh <shell command> 执行一 shell 命令
2: 常用命令说明
alias name "string" 把 string 内容定义为一缩略语 name
help section 寻找某指令的帮助
playback input <file> 从 file 中调入调试命令流
playback output <file> 输出 file 中的调试命令流
record input <file> 把调试过程输出到 file 中
record output <file> 把命令的运行输出保存到 file 中
history 显示历史命令
hed 编辑历史调试命令
!<int> 运行历史命令流中第 int 个命令
!-<int> 运行历史命令中倒数第 int 个命令
!<string> 运行历史命令流中以 string 打头的命令
!! 重复上一个命令
command;command ... 多调试命令间用 ";" 隔开
step <int> 向前追踪 <int> 步 , 进入线程
next <int> 向前追踪 <int> 步 , 不进入线程
delete all 清所有断点
listobj 列出目前使用的 obj 单元
listregions 列出被用到的内存区
enable <int>/disable <int> 恢复 / 禁用 <int> 号断点
catch 显示所有碰到的记号
cont at <line> 运行直到 line 行
intercept all 在所有例外处都中断
bx chat 在所有出现 char 打头的异常处中断
kill <pid> 杀死 pid 线程
goto <line> 从 line 行开始运行
stop <var> 当 var 产生变化时中断
stop <proc> 当进入 proc 进程时中断
stop [var] [at <line>] if <exp> 条件中断
trace <var> 当 var 变化时输出其原值和新值
trace <proc> 当进入进程时打印出母进程和参数
when if <exp> {command_list} 当条件为真时执行命令列
when at <line> [if <exp>] {command_list} 在遇到 line 行时如果条件为真执行命令列
duel <exp> 一种比较好的变量输出方式
printregs 输出所有寄存器的值
status 当前状态
/<string> 向下寻找 file 中的 string 字符串
?<string> 向上寻找 file 中的 string 字符串
set 设定或显示系统参数值