免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2308 | 回复: 0
打印 上一主题 下一主题

项目中用到的dbx命令的简单使用方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-12 08:44 |只看该作者 |倒序浏览
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变量的值
显示
1
或者用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 设定或显示系统参数值
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/75321/showart_1715049.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP