corefile介紹與gdb除錯

2021-08-19 05:36:54 字數 2958 閱讀 5446

一、什麼是coredump

應用程式由於某些異常或者bug而被強制退出時,linux系統會在當前目錄或指定目錄下生成乙個core檔案,供使用者除錯定位程式異常出現的位置。core檔案包含了程式執行時記憶體、暫存器狀態、函式呼叫堆疊等除錯資訊。

二、core file的路徑檢視與設定

1、可通過如下命令檢視core file的生成路徑:

cat /proc/sys/kernel/core_pattern

2、core file檔案開關設定及名稱設定:

1)應判斷系統是否在程式down掉之後生成core file,通過ulimit  -a可檢視當前系統資源的一些限制資訊,如圖:

這裡core file size 大小設定為0 ,是不會在程式down掉後生成core檔案的,可通過如下方式修改:

ulimit -c unlimited        #設定允許當前生成沒有大小限制的core file

ulimit -c 1024                 #設定限制當前生成的core file大小為1024,這裡單位為blocks,即為512 bytes

如欲關閉core file 生成,可如下設定:

ulimit -c 0

:如果生成的core file超過所設定的大小,將會被裁剪,生成不完整的core,在用gdb工具對此core除錯的時候,將會提示錯誤。

2)設定core file 的生成路徑及命名格式。這裡可通過如下命令,將自定義路徑寫入/proc/sys/kernel/core_pattern,從而實現路徑設定。

echo "/data/corefile/core.%e.%p" > /proc/sys/kernel/core_pattern

此時,生成的core檔名為core.命令名.程序id

相應的引數如下:

%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 新增命令名

:若 /proc/sys/kernel/core_uses_pid 為1,即使core_pattern中沒有設定%p,也會在生成的core檔名中新增程序id。core_uses_pid其值為1或0亦可通過echo命令設定。

3)上述的設定只作用於當前會話,重新登入後將失效,欲將上述設定永久生效,可通過如下設定:

將上圖標註的地方改為

上述配置對所有使用者有效,若需指定某使用者或使用者組,可如下設定:

:上述配置需重新登入後生效,且經筆者試驗,ubuntu 下由於自身bug,萬用字元 *  只對所有非root使用者生效,欲對root生效,需手動將使用者名稱設定為『 root '。

三、gdb除錯core file

以下為筆者編寫的測試程式

對程式檔案編譯時需帶-g 選項生成除錯資訊

上述操作因傳入的除數為0,造成程式異常終止,通過gdb除錯可定位錯誤位置

通過常用的gdb命令,可進一步對程式除錯

l(list) 

,          顯示源**,並且可以看到對應的行號;

b(break)x       x

是行號,表示在對應的行號位置設定斷點;

p(print)x         x

是變數名,表示列印變數x

的值r(run) 

表示繼續執行到斷點的位置

n(next) 

表示執行下一 步

c(continue)   

表示繼續執行

q(quit)

表示退出gdb

bt n/-n           列印棧頂上n層/棧底下n層資訊(此處n為正整數)

f(frame) n      檢視某一層資訊(n為層數)

info frame     會打出更為詳盡的當前層的資訊

info args        列印出當前函式的引數名及其值

info locals     列印出當前函式中所有區域性變數及其值

info catch      列印出當前的函式中的異常處理資訊

up  n               向上移n層   (無n,表向上移1層)

down    n       向下移n層(無n,表向下移1層

core file介紹及初步分析

include include int main int argc,char argv if corefile fopen argv 1 r null fread c file,sizeof c file 1,corefile fclose corefile sprintf command,lque...

使用GDB 文字使用者介面(GDB TUI)進行除錯

1 開啟tui模式 使用 gdbtui q 或 gdb tui q 開始乙個除錯 2 在tui模式下有4個視窗,command 命令視窗.可以鍵入除錯命令 source 源 視窗.顯示當前行,斷點等資訊 assembly 彙編 視窗 register 暫存器視窗 除command 視窗外,其他三個視...

C C 程式除錯神器 GDB介紹

程式在ld的時候會給so設乙個載入位址,可以通過 ttext segment 0x12345678 去指定該so的位址。ldd exec gdb的info sharedlibrary可檢視其載入位址。程式在執行過程中訪問非法記憶體時,會丟擲異常,段錯誤 program terminated with...