Python 內建 pdb 模塊提供類 GDB 的交互式調試能力:斷點、單步執行、堆棧查看、變量檢查、後現場調試。本文總結三種啟動方式與核心命令速查表。
python -m pdb myscript.py
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
if __name__ == "__main__":
a = 1
import pdb
pdb.set_trace() # 程序運行到此處暫停,進入 (Pdb) 提示符
b = 2
c = a + b
print(c)
| 命令 | 縮寫 | 功能說明 |
|---|---|---|
| help [cmd] | h | 查看幫助,無參數列出所有命令 |
| next | n | 單步執行下一行(不進入函數內部) |
| step | s | 單步執行下一行(進入函數內部) |
| continue | c | 繼續執行至下一個斷點或程序結束 |
| return | r | 執行至當前函數返回 |
| break [file:]lineno [condition] | b | 設置斷點,支持條件斷點 |
| clear [bpnumber] | cl | 刪除斷點 |
| disable/enable [bpnumber] | 禁用/啟用斷點 | |
| list [first [,last]] | l | 查看源碼上下文 |
| print expr | p | 打印變量/表達式值 |
| args | a | 打印當前函數參數 |
| where / bt | w | 打印堆棧回溯 |
| up / down | u / d | 在調用棧中向上/向下切換幀 |
| jump lineno | j | 跳轉到指定行繼續執行 |
| quit / exit | q | 終止調試並退出程序 |
(Pdb) break 25, i > 100 # 第 25 行且 i > 100 時斷下
python -m pdb -c continue myscript.py # 或者代碼中: import sys, pdb sys.excepthook = lambda t, v, tb: pdb.post_mortem(tb)
# 服務端代碼插入 import remote_pdb remote_pdb.set_trace(host='0.0.0.0', port=4444) # 客戶端連接 telnet localhost 4444 # 或 nc localhost 4444
alias pp pprint.pprint 方便打印複雜結構~/.pdbrc 預加載別名、導入常用模塊%debug 魔術命令、ipdb(支持語法高亮、Tab 補全)