除錯利器:用GDB檢視core dump (zz) - 藍ka的日誌 - 網易部落格
1. 前言:
有的程式可以通過編譯, 但在執行時會出現Segment fault(段錯誤). 這通常都是指標錯誤引起的.
但這不像編譯錯誤一樣會提示到檔案->行, 而是沒有任何資訊, 使得我們的除錯變得困難起來.
2. gdb:
有一種辦法是, 我們用gdb的step, 一步一步尋找.
這放在短小的程式碼中是可行的, 但要讓你step一個上萬行的程式碼, 我想你會從此厭惡程式設計師這個名字, 而把他叫做除錯員.
我們還有更好的辦法, 這就是core file.
3. ulimit:
如果想讓系統在訊號中斷造成的錯誤時產生core檔案, 我們需要在shell中按如下設定:
#設定core大小為無限
ulimit -c unlimited
#設定檔案大小為無限
ulimit unlimited
這些需要有root許可權, 在ubuntu下每次重新開啟中斷都需要重新輸入上面的第一條命令, 來設定core大小為無限.
4. 用gdb檢視core檔案:
下面我們可以在發生執行時訊號引起的錯誤時發生core dump了.
發生core dump之後, 用gdb進行檢視core檔案的內容, 以定位檔案中引發core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在進入gdb後, 用bt命令檢視backtrace以檢查發生程式執行到哪裡, 來定位core dump的檔案->行.
5. 用gdb實時觀察某程式crash資訊
啟動程式
gdb -p PID
c
執行程式至crash
gdb會顯示crash資訊
bt