用gdb除錯core dump檔案

2021-06-08 14:52:46 字數 2018 閱讀 5838

在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的。

什麼是core dump?

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

開發和使用unix程式時, 有時程式莫名其妙的down了, 卻沒有任何的提示(有時候會提示core dumped). 這時候可以檢視一下有沒有形如core.程序號的檔案生成, 這個檔案便是作業系統把程式down掉時的記憶體內容扔出來生成的, 它可以做為除錯程式的參考.

core dump又叫核心轉儲, 當程式執行過程中發生異常, 程式異常退出時, 由作業系統把程式當前的記憶體狀況儲存在乙個core檔案中, 叫core dump.

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

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

ulimit -c unlimited

core檔案生成的位置一般於執行程式的路徑相同, 檔名一般為core.程序號

當獲得了core檔案以後,就可以利用命令gdb進行查詢,引數一是應用程式的名稱,引數二是core檔案

如: gdb [...]xmsd [...]/xmsd_pid1065_sig11.core

然後輸入bt或者where找到錯誤發生的位置和相應的堆疊資訊。就可知道發生錯誤時的函式呼叫關係,然後可以使用up或者down檢視上一條和下一條具體詳細資訊。這樣便能對問題進行大概定位,然後看源**,進行分析。

eg:(gdb) where

#0 0x0804ff8c in memory_error (self=0x818ca10, ptr=0x82e5a94, msg=0x813efb2 "memory_free") at /aston/h_debit/xms/bin/xms_1_15_11/src/xms/lib/memory.c:140

#1 0x080504cd in memory_free (ptr=0x82e5a94) at /aston/h_debit/xms/bin/xms_1_15_11/src/xms/lib/memory.c:275

#2 0x080505ac in xml_free (ptr=0x82e5a94) at /aston/h_debit/xms/bin/xms_1_15_11/src/xms/lib/memory.c:316

#3 0xb7edb589 in xmlfreenode () from /home/zhenbo/workstation/devsuite-head/debug/lib/libxml2.so

#4 0x082b2228 in ?? ()

#5 0x08097031 in inte***cehandler_set (self=0x82bd74c, correlator=-4, conf=0x0, cb=0x82b0aac) at /aston/h_debit/xms/bin/xms_1_15_11/src/inte***ces/inte***cehandler.c:150

#6 0x0805e897 in configurable_set (self=0x82bd74c, correlator=-4, conf=0x0, cb=0x82b0aac) at /aston/h_debit/xms/bin/xms_1_15_11/src/xms/xms/configurable.c:85

#7 0x0805e73c in configurable_flush (self=0x82bd74c, correlator=-4, cb=0x82b0aac) at /aston/h_debit/xms/bin/xms_1_15_11/src/xms/xms/configurable.c:67 #8 0x08100ddc in system_complete (self=0x82b0aac, correlator=-5, code=0

如果之前不能準確定位錯誤的位置,則從以上資訊可以知道,可從函式inte***cehandler_set入手進行分析,其中的引數和行號都已經給出了。 

用gdb除錯coredump檔案

在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的。什麼是core dump?core的意思是記憶體,dump的意思是扔出來,堆出來.開 發和使用unix程式時,有時程式莫名其妙的down了,卻沒有任何的提示 有時候會提示c...

用gdb除錯core dump檔案

gdb基本的使用方法在此就不說了。載入core檔案的命令行為 dgb exe core 例如gdb testall core.2345 最重要的乙個命令是where,這個就像windbg的命令 analyze v 我模擬了幾個crash的情況,乙個乙個說。第乙個 刪除兩次指標導致crash的情況 源...

用gdb除錯core dump檔案

在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的。core的意思是記憶體,dump的意思是扔出來,堆出來.開發和使用unix程式時,有時程式莫名其妙的down了,卻沒有任何的提示 有時候會提示core dumped 這時候...