官方文檔 : https://docs.python.org/3/library/pdb.html#debugger-commands
介紹
pdb是Python自帶的庫,是Python程序的一個交互式源代碼調(diào)試工具.
使用
在調(diào)試器控制下運(yùn)行:
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> <string>(0)?()
(Pdb) continue
> <string>(1)?()
(Pdb) continue
NameError: 'spam'
> <string>(1)?()
(Pdb)
將pdb作為腳本來調(diào)試其他腳本:
python3 -m pdb myscript.py
運(yùn)行后,自動進(jìn)入pdb的命令行模式.
插入在測試代碼中
import pdb;
pdb.set_trace()
代碼運(yùn)行時,將在pdb.set_trace()處進(jìn)入斷點(diǎn)調(diào)試.
pdb模塊的函數(shù)
pdb.run(statement, globals=None, locals=None)
statement : 要調(diào)試的語句塊,以字符串的形式表示
globals: 可選參數(shù),設(shè)置statement運(yùn)行的全局環(huán)境變量
locals: 可選參數(shù),設(shè)置statement運(yùn)行的局部環(huán)境變量
示例 :
>>> import pdb # 導(dǎo)入調(diào)試模塊
>>> pdb.run(''''' # 調(diào)用run()函數(shù)執(zhí)行一個for循環(huán)
for i in range(3):
i *= 3
print(i)
''')
> <string>(2)<module>()
(Pdb) n # (Pdb)為調(diào)試命令提示符,表示可輸入調(diào)試命令
> <string>(3)<module>()
(Pdb) n # n(next)表示執(zhí)行下一行
> <string>(4)<module>()
(Pdb) print(i) # 打印變量i的值
0
(Pdb) continue # 繼續(xù)運(yùn)行程序
0
3
6
runeval(expression, globals=None, locals=None)
expression: 要調(diào)試的表達(dá)式
globals: 可選參數(shù),設(shè)置expression運(yùn)行的全局環(huán)境變量
locals: 可選參數(shù),設(shè)置expression運(yùn)行的局部環(huán)境變量
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
pdb.runeval('a+b')
final = a + b + c
print final
運(yùn)行結(jié)果 :
-> b = "bbb"
(Pdb) c
> <string>(1)<module>()
(Pdb) n
--Return--
> <string>(1)<module>()->'aaabbb'
(Pdb) c
aaabbbccc
runcall( * args, ** kwds)
function: 函數(shù)名
args(kwds): 函數(shù)的參數(shù)
import pdb
a = 3
b = 4
c = 5
def sum(a,b):
return a+b
result = pdb.runcall(sum,a,b)
print result
final = a + b + c
pdb.set_trace()
print final
運(yùn)行結(jié)果 :
-> return a+b
(Pdb) c
7
> g:\users\username\pycharmprojects\test_unittest\for_tests.py(36)<module>()
-> print final
(Pdb) c
12
pdb.set_trace()
在插入這個語句的代碼處開始進(jìn)入硬斷點(diǎn).
調(diào)試命令行
常用斷點(diǎn)調(diào)試命令 :
| 完整命令 | 簡寫命令 | 描述 |
|---|---|---|
| args | a | 打印當(dāng)前函數(shù)的參數(shù) |
| break | b | 設(shè)置斷點(diǎn) |
| clear | cl | 清除斷點(diǎn) |
| condition | 無 | 設(shè)置條件斷點(diǎn) |
| continue | c | 繼續(xù)運(yùn)行,直到遇到斷點(diǎn)或者腳本結(jié)束 |
| disable | 無 | 禁用斷點(diǎn) |
| enable | 無 | 啟用斷點(diǎn) |
| help | h | 查看pdb幫助 |
| ignore | 無 | 忽略斷點(diǎn) |
| jump | j | 跳轉(zhuǎn)到指定行數(shù)運(yùn)行 |
| list | l | 列出腳本清單 |
| next | n | 執(zhí)行下條語句,遇到函數(shù)不進(jìn)入其內(nèi)部 |
| p | 打印變量值 | |
| quit | q | 退出pdb |
| return | r | 一直運(yùn)行到函數(shù)返回 |
| tbreak | 無 | 設(shè)置臨時斷點(diǎn)、斷點(diǎn)只中斷一次 |
| step | s | 執(zhí)行下一條語句,遇到函數(shù)進(jìn)入其內(nèi)部 |
| where | w | 查看所在的位置 |
| ! | 無 | 在pdb中執(zhí)行語句 |
運(yùn)行過程中,單步運(yùn)行時,輸入上面的命令/簡寫命令,按Enter鍵執(zhí)行描述的功能.