Python Debugging With Pdb 簡單心得
pdb 是 pytyon 內建提供類似 gdb 功能,
用來除錯的程式庫。
大概有兩種用法:
python3 -m pdb myscript.pyimport pdb; pdb.set_trace()看完文章,你需要學會除錯的動作有:
pdbpython 執行程式時,執行 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 是個很好用的工具,熟練使用的話,能輕易找出程式問題。