ReadingList:
- https://mytechrants.wordpress.com/2009/05/22/debugging-a-segmentation-fault-using-gdb/
- https://wiki.archlinux.org/index.php/Step-by-step_debugging_guide
- http://www.cprogramming.com/debugging/segfaults.html
簡述:
- 首先在編譯生成程序的時候要使用“-g”選項使得編譯文件帶有調試信息,若果沒有調試信息,gdb無法工作
gcc -g -o hello hello.c
- 使得Linux可以在段錯誤時生成的core dump文件大小無限
ulimit -c unlimited
- 運行可能出錯的程序,直到出現“Segmentation fault(core dumped)”信息,這是在程序工作目錄下會生成一個core文件
- 用gdb分析core文件
gdb {executable} {dump file} eg. gdb hello core.1324
- 如果gdb調試符號正常加載,查看堆棧,找到出錯位置(哪個函數,哪個文件,哪一行出錯)
(gdb) bt //查看出錯時的堆棧
(bt = backtrace .. prints stack strace) - 還可以分析每個棧幀frame中的變量情況
(gdb) frame {num} eg. (gdb) frame 2
and use:
(gdb) info locals //查看局部變量
(gdb) info args //查看參數
- 通過以上步驟,可以定位到出錯位置,找出出錯原因。