天天看點

linux下用core和gdb查詢出現"段錯誤"的地方

有些時候我們在一段C代碼的時候,由于對一個非法記憶體進行了操作,在程式運作的過程中,出現了"段錯誤"。

呵呵,這種問題我想很多人會經常遇到。遇到這種問題是非常無語的,隻是提示了"段錯誤",接着什麼都沒 有,如果我們一味的去看代碼找太疼苦了,因為我們都相信自己寫的代碼沒問題,現實就是現實。下面介紹一種方法,可以有效的定位出現"段錯誤的地方"。

當我們的程式崩潰時,核心有可能把該程式目前記憶體映射到core檔案裡,友善程式員找到程式出現問題的地方。

什麼是core dump?

core的意思是記憶體,dump的意思是扔出來,堆出來。

為什麼沒有core檔案生成呢?

有時候程式down了,但是core檔案卻沒有生成.core檔案的生成跟你目前系統的環境設定有關系,可以用下面的語句設定一下便生成core檔案了

ulimit  -c  unlimited

core 檔案生成的位置一般于運作程式的路徑相同,在ubuntu下檔案名一般 為core.

什麼是core檔案

當一個程式奔潰時,在程序目前工作目錄的core檔案中複制了該程序的存儲圖像。core檔案僅僅是一個記憶體映像(同時加上調試資訊),主要用來調試的。

下面我們來看看,怎樣利用core檔案來定位我們出現"段錯誤"的地方.

linux下用core和gdb查詢出現"段錯誤"的地方

程式運作結果:

linux下用core和gdb查詢出現"段錯誤"的地方

從上面我們可以看出,第一次運作程式出現"段錯誤"并沒有出現core檔案,一般linux作業系統預設core檔案的大小都是0,需要手動設定一下。

調試core檔案

core檔案是個二進制檔案,需要用相應的工具來分析程式崩潰時的記憶體映像。

linux下可以用gdb來調試core檔案 。

linux下用core和gdb查詢出現"段錯誤"的地方

從上面我們可以清楚的看到我們的程式是在那個地方出現了錯誤。

呵呵,有了這種方法,我想以後我們可以不再那麼懼怕"段錯誤"了。

繼續閱讀