pdb標(biāo)準(zhǔn)庫

官方文檔 : 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)部
print 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í)行描述的功能.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 大多數(shù)編程語言都有自己的內(nèi)置函數(shù),Python也不例外,同樣提供了豐富的內(nèi)置函數(shù),其中包括算術(shù)函數(shù)、字符串操作函數(shù)...
    簡書冷雨閱讀 1,037評論 0 0
  • 個人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,948評論 0 5
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,235評論 2 33
  • 轉(zhuǎn)載 與調(diào)試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,457評論 0 10
  • 有了我們家競競后, 幾乎變成了全職媽媽。 昨晚上競競爸爸說, 媽媽早點(diǎn)睡, 晚上由爸爸帶。 然后最終結(jié)果是: 競競...
    玉妖閱讀 182評論 0 0

友情鏈接更多精彩內(nèi)容