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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM