最近都是用gcc+vim写代码,昨天突然写个代码算法出个逻辑bug,因为用了大量递归调用,DEB半天出不来也是醉了,于是

学习一下gdb——之前也是勉强使用过,但是明显感觉不爽阿。。所以这次好好学习,记录一下。

目前我能用到的几个命令:

选择调试文件

  • <shell>: gdb <file>
  • 或者进入gdb以后,使用

断点

显示断点

  • (gdb): info break

添加静态断点

  • (gdb): b[reak] + 行数/函数名 (可以用tab补全)

添加条件断点

条件为真,则在断点处停止

(gdb): b addr if condition

删除断点

删除编号为1的断点, 如果不加参数,会删除所有断点

(gdb): delete breakpoint 1

启用/禁用断点

  • (gdb): disable breakpoint 1
  • (gdb): enable breakpoint 1

运行

开始运行

  • (gdb):r

继续

  • (gdb):c

单步调试

不进入单步执行

(gdb):n

进入的单步

(gdb):s[tep

显示变量

以变量为var为例

输出var的值

  • (gdb):p var

输出上一个求得值

  • (gdb):p

输出历史记录中值

  • (gdb):p $[num]

输出变量的类型

  • (gdb):whatis p

调用函数

  • (gdb):p add(a, b)

数组

输出a后面的十个元素

(gdb):p a@10

设置运行参数

  • (gdb):set args -b -x
  • (gdb):show args

参见大牛的部分:(陈皓的gdb讲解)[http://blog.csdn.net/haoel/article/details/2880]

二、设置观察点(WatchPoint)

TAG

  • 直接输入<CR>,执行上一条命令