6 gdb學習之core檔案

2021-09-28 19:45:07 字數 1781 閱讀 5401

看到上面的結果是不是有種老相識的感覺哈,接下來就嘗試使用core解決上面問題

core檔案

有問題的程式執行後,產生「segmentation fault」時生成的具有堆疊資訊和除錯資訊的檔案。

編譯時需要加 -g 選項使程式生成除錯資訊: gcc -g core_test.c -o core_test

配置生成 core 檔案

使用 ulimit -c 檢視core開關,如果為0表示關閉,不會生成core檔案;

使用 ulimit -c [filesize] 設定core檔案大小,當最小設定為4之後才會生成core檔案;

使用 ulimit -c unlimited 設定core檔案大小為不限制,這是常用的做法;

core檔案命名和儲存路徑

①core檔案有預設的名稱和路徑,但為了方便,我們通常會自己命名和指定儲存路徑;

②可以通過 /proc/sys/kernel/core_pattern 設定 core 檔名和儲存路徑,方法如下:

echo 「/corefile/core-%e-%p-%t」 > /proc/sys/kernel/core_pattern

命名的引數列表:

%p - insert pid into filename 新增pid 

%u - insert current uid into filename 新增當前uid

%g - insert current gid into filename 新增當前gid

%s - insert signal that caused the coredump into the filename 新增導致產生core的訊號

%t - insert unix time that the coredump occurred into filename 新增core檔案生成時的unix時間

%e - insert coredumping executable name into filename 新增命令名。

除錯core檔案
gdb [exec file] [core file]
上面基礎知識講完了,接下來將實戰看看

#include

using

namespace std;

intmain()

首先檢視core檔案是否開啟狀態,然後對上面檔案進行編譯,執行

執行之後,發現當前資料夾裡多了乙個檔案,沒錯,就是core檔案

這時。我們開始gdb的除錯

通過第二個框框的內容可以知道,由於執行了a[i]=i產生的錯誤,這是,檢視a和i的值,發現a的位址為0,沒有分配位址就直接使用,重新修改原始檔,對a進行分配記憶體重新編譯執行。執行ok

GDB除錯core檔案

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

GDB除錯core檔案

core檔案是程式執行狀態的記憶體映像當程式執行過程 現segmentation fault core dumped 錯誤時,程式停止執行,並產生core檔案。使用gdb除錯core檔案可以幫我們快速定位程式出現段錯誤的位置。可執行程式編譯時應加上 g編譯選項,生成除錯資訊閉。當程式訪問的記憶體超出...

gdb除錯core檔案

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