1. 程式人生 > >Linux下如何生成core dump 文件(解決segment fault段錯誤的問題)

Linux下如何生成core dump 文件(解決segment fault段錯誤的問題)

http alt 系統設置 images mit 只讀 功能 lin 設置

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

Linux下如何生成core dump 文件(解決segment fault段錯誤的問題)