gdb除錯記憶體錯誤

2021-08-22 09:31:56 字數 1748 閱讀 2883

程式在執行一段時間才出錯,而且是記憶體錯誤。可能是指標訪問錯誤。這種情況下,查詢錯誤比較困難,可以使用core檔案幫助查詢錯誤。

$ uname -a

linux dev 2.4.21-9.30axsmp #1 smp wed may 26 23:37:09 edt 2004 i686 i686 i386 gnu/linux

再看看預設的一些引數,注意core file size是個0,程式出錯時不會產生core檔案了。

$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

file size (blocks, -f) unlimited

max locked memory (kbytes, -l) 4

max memory size (kbytes, -m) unlimited

open files (-n) 2048

pipe size (512 bytes, -p) 8

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 7168

virtual memory (kbytes, -v) unlimited

需要修改引數,才能使出錯時產生core檔案。

沒有找到core檔案,我們改改ulimit的設定,讓它產生。1024是隨便取的,要是core檔案大於1024個塊,就產生不出來了。

$ ulimit -c 1024 ulimit -c unlimited

$ ulimit -a

core file size (blocks, -c) 1024

data seg size (kbytes, -d) unlimited

file size (blocks, -f) unlimited

max locked memory (kbytes, -l) 4

max memory size (kbytes, -m) unlimited

open files (-n) 2048

pipe size (512 bytes, -p) 8

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 7168

virtual memory (kbytes, -v) unlimited

產生core檔案,可以使用gdb除錯:

可執行程式是叫做bin(通常core檔案就叫做bin.core),使用下面命令

1.gdb ./bin ./bin.core

2.使用bt命令看frames,假定在n

3.使用frame n調整frame

4.這個時候可以p任何argument或者local variable

除錯p string這樣的物件的值,可能由於過長,可以p string 的私有成員,如果p arg1.dat,這樣可以通過p arg1.dat+100這樣進行偏移。

這樣獲得了這些資料以後,我們可以將這些資料取出來,構造core的條件,單步跟蹤,今天我就用這樣的方法找到了乙個bug。

主要使用到第二條,就可以發現錯誤出現位置。在core檔案內容中,顯示的 第乙個出現在某個檔案的 行數,就為該行出現的錯誤。仔細檢視該行。之後的一些資訊就是函式呼叫的 逐行退出。而且每個都有位置標誌。

GDB除錯命令以及GDB除錯段錯誤

一 gdb的除錯命令。c語言是 cc g tst.c o tst c 是g g o 生成的檔案 file.cpp c 除錯程式命令 gdb file 啟動,羅列 行數ist 1,break 行數 info break,run r 除錯執行,step s 單步除錯,檢視變數 print p 變數名,檢...

gdb 除錯段錯誤

開發嵌入式linux的時候經常會遇到segmentation fault,也就是段異常錯誤,一般是使用錯誤的指標訪問記憶體導致。這種錯誤可以通過開啟核心的異常資訊輸出,再用gdb對發生段異常的位址進行定位。1.開啟核心的異常資訊輸出 mips的核心 關閉了arch mips mm fault.c的d...

gdb 除錯段錯誤

利用執行時產生core檔案,再利用gdb除錯找出段錯誤在哪一行 ulimit c unlimited使用該bash命令,可以使執行時段錯誤產生core檔案。1.gcc g 編譯 gcc g o a a.c2.執行檔案,便會產生乙個core.檔案 a3.除錯core檔案 gdb a core.便可以直...