Segmentation fault(core dumped) 調試

ReadingList:php

  • 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

簡述:html

  1. 首先在編譯生成程序的時候要使用「-g」選項使得編譯文件帶有調試信息,若果沒有調試信息,gdb沒法工做
    gcc -g -o hello hello.c
  2. 使得Linux能夠在段錯誤時生成的core dump文件大小無限
    ulimit -c unlimited
  3. 運行可能出錯的程序,直到出現「Segmentation fault(core dumped)」信息,這是在程序工做目錄下會生成一個core文件
  4. 用gdb分析core文件
    gdb {executable} {dump file}
    
    eg. gdb hello core.1324
  5. 若是gdb調試符號正常加載,查看堆棧,找到出錯位置(哪一個函數,哪一個文件,哪一行出錯)
    (gdb) bt   //查看出錯時的堆棧
    (bt = backtrace .. prints stack strace)
  6. 還能夠分析每一個棧幀frame中的變量狀況
    (gdb) frame {num}
    eg. (gdb) frame 2

    and use:


    (gdb) info locals //查看局部變量(gdb) info args //查看參數
  7. 經過以上步驟,能夠定位到出錯位置,找出出錯緣由。
相關文章
相關標籤/搜索