gdb使用小技巧 儲存調試點現場

2022-06-28 09:42:17 字數 1402 閱讀 5443

#include #include static int func()

return 0;

}static int func3()

static int func2()

static int func1()

int main()

(gdb) b main

breakpoint 1 at 0x80483e0: file test.c, line 31.

(gdb) r

starting program: /home/fgao/works/test/a.out

breakpoint 1, main () at test.c:31

31 int ret = 0;

missing separate debuginfos, use: debuginfo-install glibc-2.12-1.i686

(gdb) n

33 ret += func1();

(gdb) checkpoint

checkpoint: fork returned pid 2060.

(gdb)

breakpoint 1, main () at test.c:31

31 int ret = 0;

(gdb) n

33 ret += func1();

(gdb) checkpoint

checkpoint: fork returned pid 2060.

(gdb) n

34 ret += func2();

(gdb) p ret

$4 = 0

(gdb) n

35 ret += func3();

(gdb) p ret

$5 = 1

(gdb) restart 1

switching to process 2060

#0 main () at test.c:33

33 ret += func1();

(gdb)

很簡單,現在gdb恢復到了儲存checkpoint時的狀態了。上面「restart 1「中的1為checkpoint的id號,可以使用info檢視。

(gdb) info checkpoints

* 1 process 2060 at 0x80483e7, file test.c, line 33

0 process 2059 (main process) at 0x80483f7, file test.c, line 35

從上面可以看出checkpoint的用法很簡單,但是很有用。就是在平時的簡單的bug修正中,也可以加快我們的除錯速度——畢竟減少了不必要的重現bug的時間。

GDB除錯技巧

在公司工作了一段時間,發現 b s結構的 除錯很麻煩,經常用的手段是通過 printf 打一串訊息來進行跟蹤,然後估計問題出在 通過逐步新增 printf 語句,獲得越來越多的資訊最終確定問題的根源。我感覺這樣比較麻煩,如果能把 gdb的單步除錯功能用上就好了。工作之餘,做了一定的嘗試,希望對跟我一...

GDB除錯技巧

談到gdb,不能不對他的強大功能所折服,在我所用過的所有偵錯程式中,這實在是乙個強大的除錯工具,今天就說說gdb的簡單用法。gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在 unix平台下做軟體,你會發現...

gdb除錯技巧

1 以結構體形式訪問某個記憶體 print type addr 其中type是結構體型別,addr是記憶體的位址 2 顯示符號表 info symbol info symbol symbol addr symbol addr為對應的位址 print 符號名 3 檢視型別的原型定義 有時候在除錯大型程...