有些時候我們在一段C代碼的時候,由于對一個非法內存進行了操作,在程序運行的過程中,出現了"段錯誤"。
呵呵,這種問題我想很多人會經常遇到。遇到這種問題是非常無語的,只是提示了"段錯誤",接著什么都沒 有,如果我們一味的去看代碼找太疼苦了,因為我們都相信自己寫的代碼沒問題,現實就是現實。下面介紹一種方法,可以有效的定位出現"段錯誤的地方"。
當我們的程序崩潰時,內核有可能把該程序當前內存映射到core文件里,方便程序員找到程序出現問題的地方。
什么是core dump?
core的意思是內存,dump的意思是扔出來,堆出來。
為什么沒有core文件生成呢?
有時候程序down了,但是core文件卻沒有生成.core文件的生成跟你當前系統的環境設置有關系,可以用下面的語句設置一下便生成core文件了
ulimit ?-c ?unlimited
core 文件生成的位置一般于運行程序的路徑相同,在ubuntu下文件名一般 為core.
什么是core文件
當一個程序奔潰時,在進程當前工作目錄的core文件中復制了該進程的存儲圖像。core文件僅僅是一個內存映像(同時加上調試信息),主要用來調試的。
下面我們來看看,怎樣利用core文件來定位我們出現"段錯誤"的地方.

程序運行結果:



程序運行結果:

從上面我們可以看出,第一次運行程序出現"段錯誤"并沒有出現core文件,一般linux操作系統默認core文件的大小都是0,需要手動設置一下。
調試core文件
core文件是個二進制文件,需要用相應的工具來分析程序崩潰時的內存映像。
linux下可以用gdb來調試core文件 。

從上面我們可以清楚的看到我們的程序是在那個地方出現了錯誤。
呵呵,有了這種方法,我想以后我們可以不再那么懼怕"段錯誤"了。