以下面的代码(见文末,第6行明显是非法访问)为例,分如下几步介绍gdb的使用:
目录
编译采用-g flag
编译时,应加上-g 标识,否则回溯将不能显示具体的崩溃位置:
g++ main.cpp -g -o main.out
否则调用gdb后,界面提示"No Debugging Symbols Found...",即使采用了bt回溯,也定位不了崩溃位置,只能笼统的定位在main.cpp(见红线所示):
运行和退出
用gdb ./main.out启动gdb 之后,输入r,启动程序。
输入q退出gdb
bt(backtrace)调用堆栈回溯
输入bt进行回溯。下面是正常的调试效果(采用了-g标志),回溯到了main.cpp第六行,也就是非法访问之处。
附代码:
#include <stdio.h>
int main(void)
{
char * p = NULL;
printf("%s\n", p);
return 0;
}