GDB是C/C++的非常便捷的命令行调试器,在Linux下搭配GCC可以完美调试C/C++程序。

GCC参数设置

为了对g++编译生成的可执行程序使用GDB,在编译时应该使用-g参数,例如我的编译指令为alias cpl='g++ -std=c++11 -g -o $@ $@'

常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
l(list) [line_num, func_name] --> 显示指定行数或函数附近的源码

r(run) --> 起始运行程序,直到程序结束或者遇到断点停下

b(break) [line_num, func_name] --> 设置断点,使用line_num可在对应行数设置断点,使用func_name则可对于某个函数设置断点

cl(clear) [line_num, func_name] --> 取消断点 

c(continue) --> 在程序中断后继续执行程序,直到程序结束或者遇到断点停下

n(next) --> 执行下一条语句,如果有函数调用,不进入函数内部

s(step) --> 执行下一条语句,如果有函数调用,进入函数内部

u(until) [line_num, func_name] --> 执行到制定行数或者函数开头

p(print) [val, expr] --> 显示变量或者表达式的值

disp(display) expr --> 把一个表达式设置为display,每当程序停下时都会显示其值

i(info) --> 显示多种信息。i b显示所有断点,i disp显示display,i local显示所有局部变量

bt(backtrace) --> 显示程序栈调用

更多高级命令可以参考 《GDB QUICK REFERENCE》 以及 《Debugging with GDB》