GDB除錯core檔案

2021-10-22 02:54:48 字數 1273 閱讀 2411

**

core檔案是程式執行狀態的記憶體映像當程式執行過程**現segmentation fault(core dumped)錯誤時,程式停止執行,並產生core檔案。

使用gdb除錯core檔案可以幫我們快速定位程式出現段錯誤的位置。可執行程式編譯時應加上-g編譯選項,生成除錯資訊閉。

當程式訪問的記憶體超出了系統給定的記憶體空間,就會產生segmentation fault(core dumped),因此,段錯誤產生的情況主要有:

訪問不存在的記憶體位址

訪問系統保護的記憶體位址

陣列訪問越界等

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

**使用ulimit -c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,不會生成core檔案。

使用ulimit -c filesize命令,可以限制core檔案的大小(filesize的單位為kb)。如果生成的資訊超過此大小,將會被剪裁,最終說呢過程乙個不完整的core檔案。例:ulimit -c 1024

使用ulimit -c unlimited則表示core檔案大小不受限制。

在終端通過命令ulimit -c unlimited只是臨時修改,重啟後無效,永久修改的三種方式。

在/etc/rc.local中增加一行ulimit -c unlimited

在/etc/profile中增加一行ulimit -c unlimited

core預設的檔名稱是core.pid,pid指的是產生段錯誤的程式的程序號。

預設路徑是產生段錯誤的程式的當前目錄。

修改core檔名稱和路徑

使用gdb除錯core檔案來查詢程式**現段錯誤的位置時,需要可執行程式加上-g編譯命令選項。

常見的有以下幾種(推薦第一種):

步驟一:

(1)啟動gdb進入core檔案,命令格式:gdb [exec file] [ core file]

例:gdb ./test test.core

(2)進入後,查詢段錯誤位置:where或者bt

可以定位到源程式當中具體檔案的具體位置,出現的段錯誤。

步驟二:

(1)啟動gdb進入core檔案,命令格式:gdb -core=[core file]

例:gdb -core=test.core

(2)在進入gdb後,指定core檔案對應的符號表,命令格式:file [exec file]

GDB除錯core檔案

1.什麼是core dump?core dump說的是作業系統執行的乙個動作,當某個程序因為一些原因意外終止 crash 的時候,作業系統會將這個程序當時的記憶體資訊轉儲 dump 到磁碟上,產生的檔案就是core檔案了,一般會以core.形式命名。2.那些訊號能夠引起core dump?經常用到的...

gdb除錯core檔案

本人最近正在學習除錯技術,此處對棧溢位做一些總結。gdb的基本使用就不多扯了。主要針對發行在外的release版本的軟體出現問題時的除錯。一般來講,檢視堆疊就是使用bt,這個時候加上bt full會讓你更加滿意,因為這裡面可以顯示出區域性變數資訊。另一點是檢視暫存器中的值,主要是sp和ip。指令 i...

gdb除錯core檔案

1 檢視哪個二進位制檔案生成core檔案,及其生成時間 file core core.2 載入core檔案 gdb exec file core file 3 檢視堆疊資訊 gdb btn代表檢視n層堆疊資訊,可選 4 列印當前函式的引數及其值 gdb info args 5 檢視執行緒資訊 gdb...