首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

GDB調試器進階使用指南(二) - 附加進程、條件斷點、命令序列

     編輯:關於C

1. 附加到運行中的進程

適用於調試已在後台運行的程序(如服務端、守護進程)。

步驟演示

# 1. 編譯帶調試信息的程序
gcc -g -o test_attach test_attach.c

# 2. 後台運行
./test_attach &
# 輸出: [1] 2901

# 3. 查找 PID
ps aux | grep test_attach

# 4. GDB 附加
gdb
(gdb) attach 2901
Attaching to process 2901...
(gdb) bt
#0  __kernel_vsyscall ()
#1  nanosleep ()
#2  sleep ()
#3  main () at test_attach.c:19

# 5. 查看進程信息
(gdb) info proc
process 2901
cmdline = './test_attach'
cwd = '/home/user'
exe = '/home/user/test_attach'

# 6. 分離
(gdb) detach
Detaching from program: /home/user/test_attach, process 2901

注意

  • 需要同用戶權限或 root 權限(ptrace 限制)。
  • 附加後程序暫停,需 continue 恢復運行。
  • 若無調試符號,僅能看到地址,建議編譯加 -g。

2. 條件斷點

僅在滿足條件時觸發,避免在循環中手動 continue 成百上千次。

語法

(gdb) break 行號 if 條件
(gdb) break 28 if k==100
Breakpoint 1 at 0x80483a5: file test.c, line 28.

# 為現有斷點添加條件
(gdb) condition 斷點編號 條件
(gdb) condition 1 i > 50

3. 忽略斷點次數

(gdb) ignore 斷點編號 次數
(gdb) ignore 1 100  # 前100次不停

4. 批量執行命令

(gdb) continue 次數
(gdb) step 次數
(gdb) next 次數
(gdb) finish          # 執行完當前函數
(gdb) until 行號      # 執行到指定行(跳出循環常用)

5. 斷點管理

命令說明
clear按位置刪除(行號、函數名、文件:行)
delete [breakpoints] [編號]按編號刪除,無參數刪除所有
disable [breakpoints] [編號]禁用斷點,保留定義
enable [breakpoints] [編號]啟用斷點
enable once 編號啟用一次,觸發後自動禁用
enable delete 編號啟用一次,觸發後自動刪除

6. 斷點命令序列

斷點觸發時自動執行一組命令,實現自動化調試。

示例

(gdb) break 28 if k==100
(gdb) commands 1
> p k
> bt
> continue
> end
(gdb) run
# 當 k==100 時自動打印 k、棧回溯並繼續運行

7. 常用命令縮寫表

命令縮寫說明
backtracebt, where顯示棧回溯
breakb設置斷點
continuec繼續運行
deleted刪除斷點
finish-運行到函數返回
info breakpointsinfo b顯示斷點信息
nextn單步(不進入函數)
printp打印表達式
runr啟動程序
steps單步(進入函數)
untilu運行到指定行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved