產生core文件條件
用ulimit -c 指定core文件大小來開啟core文件的生成,如:ulimit -c unlimited
用gdb分析core文件的條件
可執行程序在編譯時,需加入-g參數,否則gdb無法找到symbol信息,從而無法定位問題。
例如,如下兩個cpp文件中,test.cpp會導致crash。
// test.cpp void testCrash() { int *p = 0; *p = 3; }
// main.cpp #include <stdio.h> void testCrash(); int main() { testCrash(); return0; }
在編譯時,如下的-g為必須,否則無法定位core文件中問題。
g++ -c -g test.cpp
g++ -c main.cpp
g++ test.o main.o -o main
分析core文件所需文件
- 程序運行崩潰時產生的core文件
- 產生core文件的可執行文件
用gdb分析core文件
啟動gdb:
- gdb [executable file] [core file]
進入gdb命令行后,會直接打印出導致crash的相關信息,也可執行如下命令詳細查看。
gdb命令行:
- bt: 打印程序崩潰時的堆棧信息,包括導致crash的對應的frame number,文件名和行數
- frame [frame number]: 打印出該行代碼
- info locals: 打印局部變量信息
- print [local variable]: 打印某個局部變量
- list: 打印相關代碼
- quit: 退出gdb命令行