作者:良知猶存
轉載授權以及圍觀:歡迎添加微信号:Conscience_Remains
總述
今天我們介紹一下core dump檔案,Core dump叫做核心轉儲,它是程序運作時在突然崩潰的那一刻的一個記憶體快照。作業系統在程式發生異常而異常在程序内部又沒有被捕獲的情況下,會把程序此刻記憶體、寄存器狀态、運作堆棧等資訊轉儲儲存在一個檔案裡。
該檔案也是二進制檔案,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb進行打開分析裡面的具體内容。
基于core檔案的快照功能,我們就可以專門調試分析程式崩潰原因了,gdb同時調試一個運作程式和core檔案,然後進行gdb調試的步驟,然後檢視代碼崩潰瞬間系統資訊。
使用如下:
gdb ./abort ./core /* 使用gdb調試*/
三、生成core檔案配置
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbwxCdh1mcvZ2LcV2Zh1Wa9M3clN2byBXLzN3btg3PBRkTygzUVRDarRGUoh1YSZVRPBFbGJFasdVTyU1VWNnQY1URKVFVzUFMUZjWz0Ee3VFVZJlRjFHZE9kUspnUTRXbNZnS6RFbk1WUSJlVjlmUE1keSNjYtBXRVhXQz0kaWRVWVZURkRlVV1kasd1Tox2RUlFZVJmWSJTWxkTeaVnQzglNs1WW0FjMYZjTzwUdO1GTqx2RjhXNpVGcKdlY0lTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
1.代碼崩潰的條件有很多種,我們可以通過 kill -l 指令來檢視奔潰的信号
kill -l
使用記憶體轉儲檔案
ulimit
雖然我們知道程序在coredump的時候會産生core檔案,但是有時候卻發現程序雖然崩潰了,但是我們卻找不到core檔案。
這是因為系統預設情況下記憶體轉儲檔案 的大小設定是零,我們需要重新配置一下。ulimit -c 可以設定core檔案的大小,如果這個值為0.則不會産生core檔案,這個值太小,則core檔案也不會産生,因為core檔案一般都比較大。
2. 其中使用ulimit -c 可以檢視你的系統對資源的限制情況
ulimit -c
發現設定為0
3.我們可以使用ulimit -c unlimited來設定無限大,則任意情況下都會産生core檔案
/*用來設定運作你的系統在應用程式崩潰之時可以生産core dump檔案*/ ulimit -c unlimited
4.執行 ./編譯好的執行檔案,代碼崩潰産生記憶體轉儲的core dump檔案,ls 可看到一個名為core且以程序号為字尾的檔案
5.調試coredump檔案
gdb ./statck ./core
調試方法與gdb調試正常程式一樣,詳情參照上一篇一文入門Linux下gdb調試(一)。
這就是我分享的gdb core dump 生成及調試方法,如果大家有什麼更好的思路,歡迎分享交流哈。
更多分享,掃碼關注我