以下面的代碼(見文末,第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;
}