0、如何看待gdb(调试器)?
- 对于调试器的态度
- 会操作gdb,知道怎么使用它
- 习惯其他野路子能方便解决也可以,没有哪种一定好或不好
1、背景认识
- gcc && g++默认形成的可执行程序时release的,故无法直接被调试
- 若
gdb 可执行程序文件名
会出现:no debugging symbols found
- 形成debug版本的可执行程序:
gcc mytest.c -o mytest-debug -g
- 区分release版本和的debug版本:
- ①debug版本文件大小比release大
- ②读取可执行程序数据信息:
readelf -S mytest-debug | grep -i debug
-S
:读取各个段grep -i debug
:检索出所有有关debug的文件
- 区分release版本和的debug版本:
- 若
2、具体基本的使用操作
- 进入gdb:
gdb 可执行程序文件名
- 退出gdb:
(gdb) quit
- gdb会记录最近一条命令,如果命令无变化,可以直接回车
r
:开始调试,若没有设置断点,就直接运行结束b 行数
:给特定的行号打断点info b
:查看所有断点(包括断点编号)d 断点编号
:删除断点n
:(next)逐过程,等同于vs中的F10- 若中途想看某处的值,可通过:
p result(变量)
- 若中途想看某处的值,可通过:
p 变量名
:打印变量内容s
:逐语句,F11bt
:查看当前的调用堆栈finish
:将当前函数跑完,就停下来display
:设置长显示undisplay
:取消长显示until
:跳转到指定行c
:运行 至下一个断点处停下来disable/enable 断点的编号
:使能(关闭和打开)断点