ulimit -c #檢視core檔案的生成開關,若為0則關閉
ulimit -c unlimited #開啟開關,只在當前shell生效
sudo sh -c 'echo "./%e.core.%p" > /proc/sys/kernel/core_pattern' #在當前目錄下生成core檔案,臨時生效
gdb ./process #直接除錯目標程式gdb ./process core #除錯轉儲檔案
gdb #除錯服務程式
棧回溯顯示我們是如何到達失敗點的,通常足夠幫助我們確定常見的問題。
bt (backtrace的簡寫)常常是我在 gdb 中使用的第一條命令
gdb$ bt #棧回溯,有core檔案的情況下disas main #反彙編main函式,或者其它出錯函式
i r #(info registers 的簡寫)列印暫存器值
start #開始除錯,在main函式的第一條語句停下來 ; 等同於 break main
break 是設定斷點,可簡寫為b
b n #在第n行原始碼處設定斷點
b fn1 if a>b #條件斷點設定
b func #在func()函式入口點設定斷點
delete 斷點號n #刪除第n個斷點
disable 斷點號n #暫停第n個斷點
enable 斷點號n #開啟第n個斷點
clear 行號n #清除第n行的斷點
info b #(info breakpoints)顯示當前程式的斷點設定情況
delete breakpoints #清除所有斷點
r #執行此程式c #繼續執行
next #單步步過
step #單步步入
until
#一直執行程式,直到退出迴圈體
until+行號 #執行至某行,不僅僅用來跳出迴圈
finish #執行程式,直到當前函式完成返回,並列印函式返回時的堆疊位址和返回值及引數值等資訊
call 函式(引數) #呼叫程式中可見的函式,並傳遞「引數」,如:call gdb_test(55)
q #退出
print 表示式:簡記為 p ,其中「表示式」可以是任何當前正在被測試程式的有效表示式
比如當前正在除錯c語言的程式,那麼「表示式」可以是任何c語言的有效表示式,包括數字,變數甚至是函式呼叫
print a #將顯示整數 a 的值print name #將顯示字串 name 的值
p main #列印main函式內容和位址
p buffer #列印buffer內容
p &buffer #列印buffer位址
info f #這句也可以查到main函式位址,最後一行
gdb 有乙個超棒的功能叫回退
reverse-stepi #回退一條指令
x 是 examine 的縮寫
n 表示要顯示的記憶體單元的個數
f 表示顯示方式, 可取如下值
x 按十六進製制格式顯示變數。d 按十進位制格式顯示變數。
u 按十進位制格式顯示無符號整型。
o 按八進位制格式顯示變數。
t 按二進位制格式顯示變數。
a 按十六進製制格式顯示變數。
i 指令位址格式
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
u 表示乙個位址單元的長度
b 表示單位元組h 表示雙位元組
w 表示四位元組
g 表示八字節
format letters are
o(octal), x(hex), d(decimal), u(unsigneddecimal)t(binary), f(float), a(address), i(instruction), c(char) ands(string)
size letters are
b(byte), h(halfword), w(word), g(giant, 8bytes)
x/3uh buf
表示從記憶體位址buf讀取內容h 表示以雙位元組為乙個單位
3表示三個單位
u 表示按十六進製制顯示
(gdb) list#include
intmain()
(gdb)
break
10breakpoint
1 at 0x8048372: file test.c, line 10
.(gdb) run
starting program:/data/compiler/g_platform/bradenwu/md5/test.out
breakpoint
1, main () at test.c:10
10return0;
(gdb) x/8xb md5
0x8837f465: cannot access memory at address 0x8837f465
(gdb) x/8xb &md5
0xbfffefa0: 0x65
0xf4
0x37
0x88
0x2e
0x4f
0x0b
0xc4
linux除錯工具gdb用法
1 編譯選項 1.1 gcc g 名 g 付 行 gdb 可能 為 情報 増 生成 実行 大 2.除錯命令 2.1.gdb programname 2.2.gdb args programnmae arg1 arg2 2.3.gdb b n n 行數 break point 設定 gdb b 関數名...
除錯工具 gdb
gcc o a.out a.c gdb q a.out break main info register i r objdump d a.out grep a20 main.轉換為機器 objdump m intel d a.out grep a20 main.gdb 設定 1 gdb q 2 se...
gdb除錯工具
檢視幫助一是man 命令,二是進入 www.gnu.org 找到gdb的幫助文件 更詳細 gcc wall g main.c o main,只有這樣才能產生除錯資訊,包括core的除錯資訊。一 常用命令 run r 執行,執行到斷點,重新用r,表示重新開始執行。list l 列出源 l 2,l ma...