使用GDB(GNU調試器)進行Linux進程調試是一種非常強大的技術,可以幫助開發者診斷和修復程序中的問題。以下是一些常用的GDB調試技巧:
你可以通過以下命令啟動GDB并附加到一個正在運行的進程:
gdb -p <pid>
或者啟動一個新的進程:
gdb <executable>
在代碼中設置斷點,以便程序執行到特定位置時暫停:
break <function_name>
break <filename>:<line_number>
使用run
命令啟動程序:
run [arguments]
在斷點處查看變量的值:
print <variable_name>
info locals
info args
使用step
命令逐行執行代碼:
step
或者使用next
命令逐行執行代碼,但不進入函數內部:
next
使用continue
命令繼續執行程序,直到下一個斷點或程序結束:
continue
使用backtrace
命令查看當前的調用棧:
backtrace
在斷點處修改變量的值:
set <variable_name> = <value>
查看特定內存地址的內容:
x/<n><f><u> <address>
例如,查看10個字節的內存內容:
x/10bx <address>
設置條件斷點,只有當滿足特定條件時才會觸發:
break <function_name> if <condition>
查看當前程序的所有線程:
info threads
切換到特定線程:
thread <thread_id>
查看和處理信號:
handle <signal> nostop noprint pass
使用GDB腳本自動化調試過程:
source <script.gdb>
使用GDB的圖形用戶界面前端,如DDD或CGDB,可以更方便地進行調試。
分析核心轉儲文件以診斷程序崩潰的原因:
$ gdb -p 1234
(gdb) break main
Breakpoint 1 at 0x4005d6: file main.c, line 10.
(gdb) run
Starting program: /path/to/executable
Breakpoint 1, main () at main.c:10
10 int x = 5;
(gdb) next
11 printf("Hello, World!\n");
(gdb) print x
$5 = 5
(gdb) continue
Continuing.
通過這些技巧,你可以更有效地使用GDB進行Linux進程調試。記住,調試是一個迭代過程,需要耐心和細致的觀察。