最近通过《软件调试的艺术》学习GDB,书刚读了大概三分之一,这里先记一些笔记
:-)
缩写
short | full |
---|---|
b | break |
i b | info break |
c | continue |
r | run |
at | attach |
s | step |
n | next |
p | |
bt | backtrace |
基本操作
断点
b position
position
可以是 filename:line filename:function
filename可以不指明,gdb总有一个焦点文件
,刚启动时焦点文件是main函数所在的文件,当程序运行时,焦点文件是当前执行代码所在的文件,也可以通过 list filename:functionname
来设定焦点。
断点命令:
command breakPointNumber
,对编号为breakPointNumber
的断点设置命令,以end
结尾,执行到此断点时,命令会执行,比如打印变量:
printf(“at break point 3,
i = %d,j = %d,k = %d\n”,
i,j,k) //括号可有可无
一些命令,感觉用处不大。。。
-
define 定义宏,可带最多十个参数
define PRINT_AND_GO xxxxx(说明) >printf $arg1,$arg0 >continue >end
- `show user` : 列出所有宏
- `silent` : 不输出信息
## 监视点
wathc `value`
watch `expession`
`expression`是 **当前程序语言风格** 的条件表达式,比如 (i>0)&&(j==2)
当`value`变化或`expression`成立时,程序中断。
设置监视点时必须保证监视变量在当前程序指针所在位子有效,即对已局部变量,必须保证程序指针停留在局部变量所在函数,所以一般在要函数入口处加一个断点,然后才能设置函数内变量的监视点。
##条件断点
- 设置条件断点
b `position` if (`expression`)
`expression`外的括号可有可无
- 将已有断电设置为条件断点
condition `breakPointNumber` if (`expression`)
`breakPointNUmber`用 info breakpoint(i b)查看
## 继续执行
- c/continue 继续执行到下个断点
- fin/finsh 继续执行到此函数结束
- u/until 继续执行到循环结束
*当然,断点对 `fin/u` 依然有效*
*u 可带位置参数:u `position` *
- s/step 执行下一条语句,会进入函数
- n/next 执行下一条语句,不会进入函数
*s/n可带步数参数: s 4*
网友评论