最近通读了一下软件调试的艺术(The art of debugging with gdb,ddd,eclipse),总体来说是一般入门级的调试用书。我个人感觉对初学gdb的有一定的作用,有愧于题目art,调试能力的提高必须通过实践。我简单的做个总结,供入门参考。主要讲了gdb的常用命令以及常见bug的调试方法。
常用命令:
1. 暂停机制
a.断点的使用
设置断点的方法:break(b) funtion 例如:break main,表示在main函数入口处暂停
break filename:line_num 例如:break 5 表示每到当前源文件第5行暂停
临时断点 tbreak 6 ,表示第6行暂停一次
删除断点 delete 断点编号
清除断点 clear 要清除断点所在行号
恢复暂时失效的断点 enable 断点编号
使断点失效 disable 断点编号
条件断点 break break-args if condition ,等同 break break-args ,condition 1 condition
获取所有的断点信息 info breakpoints (i b)
断点命令列表
commands breakpoint-number
commandlines
commands
ends
b.继续调试
continue 继续运行直到下一个断点或结束
step 单步进入,单步跟踪,进入具体函数
next 单步不进入,单步跟踪,不进入具体函数 next 3
finish(fin) 恢复执行,直到恰好在当前帧完成之后为止
until
c. 监视点
watch var or expression
d. 检查和设置变量
查看变量 print var ;print *pointer
print *array@len array为动态开辟的len长度的数组
display var expression
使用上述的命令列表
使用call调用程序
设置变量 set var =value
查看栈信息 backtrace(bt)
frame n
显示源代码 list
显示源代码的行数 show linesize ,show一般用于显示gdb的环境变量
设置显示源代码的行数 set linesize n
e. 线程相关
info threads
thread num
break num thread num
break num thread num if condition
简单的罗列了一下命令,命令是死的,更多的是实践和积累。