1. 除錯 core dump
程式執行時, 經常會因為段錯誤(segment fault)而退出, 作業系統會把此程式當前記憶體資訊 dump 到磁碟上(詳見 wiki), 即生成 core 檔案. 對 core 進行分析可以很快分析出導致程式 crash 的地方.
系統預設不會生成 core 檔案, 需要進一步設定. core 檔案的生成依賴於 shell 的設定, 在 shell 中執行命令: ulimit -a, 從第一行的設定項可以看到系統設定的 core file size 為 0, 即不生成 core file.
使用命令: ulimit -c unlimited 可以設定 core file size 為無限.
在 c++ 中製造乙個 segment falt 太容易了, 直接給乙個空指標賦值就可以了.
int main(int argc, char const *argv)
儲存檔案為 coredumptest.cpp, 編譯並執行, 即可以現磁碟上多了乙個 core 檔案, 就是這個程式發生段錯誤 dump 下來的程序資訊.
使用 gdb ./coredumptest core 來除錯 core, 發現 gdb 直接就定位到了出錯的語句(第4行賦值語句), 還可以通過 print 來檢視當前上下文變數, 如指標 p 的值為 nullptr.
參考:
C 產生core 檔案
今天執行乙個程式的時候,程式退出,但是沒有core檔案,可以穩定復現,查了查產生core檔案條件,不知道怎麼快速定位這個問題 一 c 產生core檔案的條件 1 是允許core檔案產生,例如你設定 ulimit c unlimited。並且對core檔案的產生目錄 也就是工作目錄 要有寫許可權。2 ...
在Linux下產生並除錯core檔案
在linux下產生並除錯core檔案 先看看我用的是個什麼機器 uname a linux dev 2.4.21 9.30axsmp 1 smp wed may 26 23 37 09 edt 2004 i686 i686 i386 gnu linux 再看看預設的一些引數,注意core file ...
在Linux下產生並除錯core檔案
uname a linux dev 2.4.21 9.30axsmp 1 smp wed may 26 23 37 09 edt 2004 i686 i686 i386 gnu linux 再看看預設的一些引數,注意core file size是個0,程式出錯時不會產生core檔案了。ulimit ...