Python Debugging With Pdb 簡單心得
pdb 是 pytyon
內建提供類似 gdb
功能,
用來除錯的程式庫。
大概有兩種用法:
python3 -m pdb myscript.py
import pdb; pdb.set_trace()
看完文章,你需要學會除錯的動作有:
pdb
python 執行程式時,執行 pdb
模組
$python -m pdb myscript.py
這樣就會進入互動式除錯模式。按 h(elp)
看說明:
Debugger Commands
(Pdb) h
Documented commands (type help <topic>):
========================================
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
Miscellaneous help topics:
==========================
exec pdb
一些常用指令:
h(elp) [command]
: 看指令說明在程式碼內載內 pdb
import pdb; pdb.set_trace()
執行程式後,就會互動除錯模式。
Python 3.7, PEP 553 加入一個比較簡單的除錯內建函式 breakpoint()
l(ist) [first[, last]]
:顯示目前執行的到程式碼,沒加參數的話,就是印出單行ll
long list: 印出多行程式碼,並指出目前執行的到行數p expression
:印出變數pp expression
:印出變數, pretty-printedwhatis expression
:印出變數的型態,int or string …a(rgs)
:列出目前函數的所有參數n (next)
:執行程式下一行s (step)
:步進程式c(ont(inue))
:執行到下一個中斷點停止display [expression]
:監視變數,變數有變動時,就會顯示。undisplay [expression]
:停止監視變數b(reak) [([filename:]lineno | function) [, condition]]
:設罝中斷點, b
不加參數,會列出所有中斷點。tbreak [([filename:]lineno | function) [, condition]]
:暫時中斷點,執行後,就會被移除。cl(ear) [filename:lineno | bpnumber [bpnumber ...]]
清除中斷點disable [bpnumber [bpnumber ...]]
:停用中斷點enable [bpnumber [bpnumber ...]]
:啟用中斷點pass
pdb 是個很好用的工具,熟練使用的話,能輕易找出程式問題。