什麼是 core dump ? 以及如何使用gdb對 core dumped 進行調試

什麼是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調試的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章