天天看點

一文入門Linux下gdb調試(二)

作者:良知猶存

轉載授權以及圍觀:歡迎添加微信号:Conscience_Remains

總述

    今天我們介紹一下core dump檔案,Core dump叫做核心轉儲,它是程序運作時在突然崩潰的那一刻的一個記憶體快照。作業系統在程式發生異常而異常在程序内部又沒有被捕獲的情況下,會把程序此刻記憶體、寄存器狀态、運作堆棧等資訊轉儲儲存在一個檔案裡。

  該檔案也是二進制檔案,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb進行打開分析裡面的具體内容。

    基于core檔案的快照功能,我們就可以專門調試分析程式崩潰原因了,gdb同時調試一個運作程式和core檔案,然後進行gdb調試的步驟,然後檢視代碼崩潰瞬間系統資訊。

使用如下:

gdb  ./abort  ./core    /*  使用gdb調試*/           

三、生成core檔案配置

一文入門Linux下gdb調試(二)

1.代碼崩潰的條件有很多種,我們可以通過 kill -l 指令來檢視奔潰的信号

kill -l           
一文入門Linux下gdb調試(二)
一文入門Linux下gdb調試(二)

使用記憶體轉儲檔案

ulimit

雖然我們知道程序在coredump的時候會産生core檔案,但是有時候卻發現程序雖然崩潰了,但是我們卻找不到core檔案。

這是因為系統預設情況下記憶體轉儲檔案 的大小設定是零,我們需要重新配置一下。ulimit  -c 可以設定core檔案的大小,如果這個值為0.則不會産生core檔案,這個值太小,則core檔案也不會産生,因為core檔案一般都比較大。

2. 其中使用ulimit -c 可以檢視你的系統對資源的限制情況

ulimit -c           
一文入門Linux下gdb調試(二)

發現設定為0

3.我們可以使用ulimit  -c unlimited來設定無限大,則任意情況下都會産生core檔案

/*用來設定運作你的系統在應用程式崩潰之時可以生産core dump檔案*/              ulimit  -c unlimited           
一文入門Linux下gdb調試(二)

4.執行 ./編譯好的執行檔案,代碼崩潰産生記憶體轉儲的core dump檔案,ls 可看到一個名為core且以程序号為字尾的檔案

一文入門Linux下gdb調試(二)

5.調試coredump檔案

gdb ./statck  ./core           
一文入門Linux下gdb調試(二)

調試方法與gdb調試正常程式一樣,詳情參照上一篇一文入門Linux下gdb調試(一)。

 這就是我分享的gdb core dump 生成及調試方法,如果大家有什麼更好的思路,歡迎分享交流哈。

一文入門Linux下gdb調試(二)

更多分享,掃碼關注我