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