Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103670780
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 17:20:34

作者:godugodu  出处:Unix爱好者家园unix-cd.com   
 

 dbx是unix下普遍的源码调试工具, 
掌握好了dbx的使用,无疑象增添了unix下编程的一把利器 
研究了一下午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变量的值 
显示 

或者用printf "%d",i来显示用c语言格式的输出。(aix下没有printf命令) 
对以后比较负责的数组什么的,用 
dbx)duel i方式可能更加显示的方便。 
以后泥可以用 
dbx)step (step相当于trace into,就是可以进入线程内部,比如本例子中hello()模块) 
或者 
dbx)next (next不进入hello()模块内部) 
来执行下一行程序。 
用 
dbx)cont 命令可以直接运行到结束。 
dbx中控制命令多多,功能十分强大的。 
查看源码可以用 
dbx)list begin,end 
就显示hello.c文件中从begin到end行的所有程序,并且配上了行号。 
用 
dbx)file 可以改变泥要查看的源码文件名称. 

下面是查看了dbx的man手册后对一些常用/使用命令的中文说明 
这些命令对普通的调试已经足够了,一些多线程的调试命令就不加以介绍了 
dbx使用指南: 
1:实用命令 
quit/q 退出 
q 退出 
run arg1 arg2 ... 用参数运行现有进程 
r 用上次的参数再次运行 
stop at  在第line行设断点 
stop at  在过程proc被调用处设断点 
cont  继续运行到记号(断点或其他)处 
return 执行完目前的进程返回 
print  ... 打印表达式的值 
printf "string",exp,... 用c语言的格式打印结果 
where 打印当前调试状态,包括当前进程等信息 
func  看当前运行进程名/移动到调用proc进程的母进程处 
file  查看的文件切换到file文件处 
list , 从file文件中列出从exp1行到exp2行 
list : 列出file文件中从exp行开始的int行 
whatis  显示变量的类型 
sh 崭时进入sh状态 
sh  执行一shell命令 
2:常用命令说明 
alias name "string" 把string内容定义为一缩略语name 
help section 寻找某指令的帮助 
playback input  从file中调入调试命令流 
playback output  输出file中的调试命令流 
record input  把调试过程输出到file中 
record output  把命令的运行输出保存到file中 
history 显示历史命令 
hed 编辑历史调试命令 
! 运行历史命令流中第int个命令 
!- 运行历史命令中倒数第int个命令 
! 运行历史命令流中以string打头的命令 
!! 重复上一个命令 
command;command ... 多调试命令间用";"隔开 
step  向前追踪步,进入线程 
next  向前追踪步,不进入线程 
delete all 清所有断点 
listobj 列出目前使用的obj单元 
listregions 列出被用到的内存区 
enable /disable  恢复/禁用号断点 
catch 显示所有碰到的记号 
cont at  运行直到line行 
intercept all 在所有例外处都中断 
bx chat 在所有出现char打头的异常处中断 
kill  杀死pid线程 
goto  从line行开始运行 
stop  当var产生变化时中断 
stop  当进入proc进程时中断 
stop [var] [at ] if  条件中断 
trace  当var变化时输出其原值和新值 
trace  当进入进程时打印出母进程和参数 
when if  {command_list} 当条件为真时执行命令列 
when at  [if ] {command_list} 在遇到line行时如果条件为真执行命令列 
duel  一种比较好的变量输出方式 
printregs 输出所有寄存器的值 
status 当前状态 
/ 向下寻找file中的string字符串 
? 向上寻找file中的string字符串 
set 设定或显示系统参数值 
阅读(357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~