在linux環境下執行程式的時候有的時候會出現一些問題,這個時候就可以使用gdb工具進行除錯,以下是公司實習期間學習gdb的一些總結。
1、gdb的簡介
gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。
一般來說,gdb主要完成以下四個方面的功能:
(1)啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。
(2)可讓被除錯的程式在你所指定的除錯的斷點處挺住。
(3)當程式被停住時,可以檢查此時你的程式中所發生的事。
(4)動態的改變你程式的執行環境。
2、gdb的常用命令
(1)bt,檢視棧呼叫資訊;bt full檢視詳細棧呼叫資訊。
(2)frame n ,跳轉到指定的棧n
(3)up/down,棧呼叫上/下移乙個函式呼叫
(4)print,列印命令,簡寫p
print var :列印變數的值
print &var ;列印變數的位址
(5)list ,簡寫l,列出原始碼資訊
(6)info args ,檢視函式引數資訊
(7)info locals ,檢視函式中區域性變數的資訊
(8)info register ,檢視cpu暫存器的資訊
3、coredump的介紹
通常情況下coredump包含了程式執行時的記憶體,暫存器狀態,堆疊指標,記憶體管理資訊等。可以理解為把程式工作的當前狀態儲存成乙個檔案(core檔案)。
設定core
檔案大小非
0,兩種方式
1. ulimit
–csize
2. 呼叫
setrlimit
()在**中設定
設定corepattern
echo /
nfs/
coredump
/core-%e-%p-%s-%t> /
proc
/sys/kernel/
core_pattern
以下是引數列表:
%p-
pid%u - 當前uid
%g - 當前gid
%s -
導致產生
core
的訊號%t -core檔案生成時的unix時間
%h - 主機名
%e - 可執行檔名
4、如果系統中沒有安裝gdb或者不能生成coredump,可以通過在**中新增如下**產生coredump:
#include #include struct rlimit rlim;
rlim.rlim_cur =rlim_infinity;
rlim.rlim_max=rlim_infinity;
setrlimit(rlimit_core,&rlim);
高階gdb之core dump的除錯
basic perl等語言處理的可以說是user的資料,c可以說在那邊把資料在記憶體移來移去,組語可說把資料在暫存器搬來搬去,越低階的處理表示握有的資源越少 所以c處理不好的話很容易記憶體跨出範圍,或者系統毀了 panic 這時都會產生乙個core dump,就是毀掉的瞬間記憶體內部的內容會搬到乙個...
GDB除錯coredump檔案
linux上程式崩潰起來挺煩人,不過linux 比較好的是有gdb.echo ulimit c unlimited etc profile 然後記得敲入命令 source etc profile然後敲入命令 ulimit c效果如下 確認能否生成coredump檔案,使用如下命令 使用時注意,我在測...
gdb除錯coredump檔案
linux上程式崩潰起來挺煩人,不過linux 比較好的是有gdb.echo ulimit c unlimited etc profile 然後記得敲入命令 source etc profile然後敲入命令 ulimit c效果如下 確認能否生成coredump檔案,使用如下命令 使用時注意,我在測...