Linux下gdb应该是使用最广泛的调试方法。下面是一些最基本的gdb调试命令和一个栗子:
如果我们有如下的代码需要调试:(命名为test.cpp)
/*
test.cpp
test for gdb
author:Mew
*/
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main(int argc, char** argv) {
int a = 1, b = 2;
int c = add(a, b);
printf("%d\n",c);
return 0;
}
文本编辑器中编辑好之后编译
然后我们可以用gdb来进行调试了
推荐gdbtui这个命令,比一般的gdb多了一个调试界面,不用像gdb一样在命令行窗口里面查看代码。
先介绍几个最基本的gdb命令
r: 运行程序(run)
b: 设置断点(break point)
n: 单步执行(如果这条语句调用了函数,不进入这个函数执行)(next)
s: 单步执行 (和n相对,会进入函数执行)(step)
c: 运行到断电之后继续运行 (continue)
p: 打印变量 (print)
q: 退出gdb (quit)
这只是最基本的几个命令,在实际的应用中这几个命令可能并不满足需求
下面是我们利用gdb来调试test.cpp
首先运行编译好的test可执行文件:
进入了调试界面:
上面的一部分可以看到代码,下面的部分可以输入gdb命令
我们先在第14行设置一个断点
然后在15行设置一个断点
用r来运行这个程序,发现在第14行执行停止
然后用c命令继续运行,运行到第二个断点(15行)
用s命令进入这个函数,并且用p打印变量值:
用n单步执行下一条语句,直到程序结束
用这样的方法可以调试linu下面的C++程序,单步、断点、打印变量值的操作还是很实用的
2015.6.8 更新
ulimit -c unlimited 允许程序生成core文件
gdb xxx core 使用core查看堆栈信息
bt 列出调用栈