Linux下的C程序常常會因為內存訪問等原因造成segment fault(段錯誤),如果此時core dump 的功能是打開的,在運行我們的可執行程序時就會生成一個名為core的文件,然后我們就可以用gdb對core文件來進行調式,還原發生錯誤的堆棧情況,這對於我們調試bug非常有幫助。
1. 使用 ulimit -a 可以察看當前系統core文件的大小限制;
使用 ulimit -c [kbytes] 可以設置系統允許生成的core文件大小。
如:
ulimit -c 0 --- 不產生core文件
ulimit -c 200 --- 設置core文件最大為200k
ulimit -c unlimited --- 不限制core文件大小
2. 我們先寫一段會造成段錯誤的程序
編譯運行結果如下:
此時察看我們當前文件路徑並沒有core文件生成。
3. 執行ulimit -a 察看當前系統設置:
此時我們看到當前系統core file size 為0,意思就是不產生core文件。
現在我們執行如下圖的命令,不限制生成core文件的大小。
然后我們運行我們程序,可見core文件就生成了:
最后采用gdb來分析程序,察看堆棧情況:
從上述的輸出中可以清楚看到,段錯誤出現在testCore.c的第6行,問題就已經定位到了。
很多系統默認生成core文件的大小都是0,像這樣設置core文件大小,只在當前會話有效,如果關閉終端重新啟動的的話就沒有了,還需要輸入上面的命令。
4. 如果要設置永久有效,可以修改/etc/security/limits.conf 文件, 找到 * soft core 0,修改為* soft core unlimited保存,這樣每次啟動時都會去讀取這個配置文件。
如果遇到上述情況,打開limits.conf 出現警告這是一個只讀文件,可以用chmod 命令來修改文件的權限,添加寫權限。
http://www.cnblogs.com/jiangson/p/5956674.html