什麼是core dump?(down = 當)
core的意思是:內存,dump的意思是:扔出來、堆出來。
開發和使用linux程序時,有時程序莫名其妙的down掉了,卻沒有任何的提示(有時候會提示core dumped)。
這時候可以查看一下有沒有形如:core 的文件生成,這個文件便是操作系統把程序down掉時的內存的內容扔出來生成的,它可以做爲調試程序的參考。
core dump又叫核心轉儲,當程序運行過程中發生異常,程序異常退出時,由操作系統把程序當前的內存狀況存儲在一個core文件中,叫core dump。
爲什麼沒有core文件生成呢?
有時候程序down掉了,但是core文件卻沒有生成。
首先,就是要知道錯誤發生的地方。而Linux系統可以產生core文件,配合gdb就可以解決這個問題。
core文件的生成跟你當前系統的環境設置有關係,可以用下面的語句設置一下, 然後再運行程序便成生成core文件了。
第一步:讓系統在信號中斷造成的錯誤時產生core文件:
ulimit -c unlimited // 設置core大小爲無限
ulimit unlimited //設置文件大小爲無限
第二步:編譯原來的程序:
gcc -o xxx xxx.c -g
(-g選項的作用是在可執行文件中加入源碼信息,比如可執行文件中第幾條機器指令對應源代碼的第幾行,但並不是把整個源文件嵌入到可執行文件中,而是在調試時必須保證gdb能找到源文件。)
第三步:運行編譯後的的程序:
./xxx(或者 xxx)
運行後,然後 ls 發現多出來了core文件。
core文件生成的位置一般與運行程序的路徑相同,文件名一般爲 core。
第四步:用gdb查看core文件:
若沒有安裝gdb,則需要先安裝它,安裝gdb參考網址:http://www.cnblogs.com/chenmingjun/p/8280889.html
安裝完成後使用如下命令:
gdb xxx core
第五步:輸入bt或者where,就會出現錯誤的位置,就可以顯示程序在哪一行dowm掉的,在哪個函數中down掉的。如下圖:
具體錯誤可以從#0到#6來找。
以上就是 core dumped調試的方法。