10分鐘教程掌握Python調(diào)試器pdb

如果你還主要靠print來調(diào)試代碼,那值得花10分鐘試試pdb這個Python自帶的Debug工具。


Python調(diào)試器pdb效果截圖

pdb有2種用法:

  • 非侵入式方法(不用額外修改源代碼,在命令行下直接運(yùn)行就能調(diào)試)
python3 -m pdb filename.py

  • 侵入式方法(需要在被調(diào)試的代碼中添加一行代碼然后再正常運(yùn)行代碼)
import pdb;pdb.set_trace()

當(dāng)你在命令行看到下面這個提示符時,說明已經(jīng)正確打開了pdb

(Pdb) 

然后就可以開始輸入pdb命令了。
先看一個pdb的常用命令的簡明表格,然后詳細(xì)說明。

命令 功能
l或ll 查看源代碼
b 添加斷點(diǎn)
tbreak 添加臨時斷點(diǎn)
cl 清除斷點(diǎn)
p 打印變量值
s或n或r 逐行調(diào)試命令
c 非逐行調(diào)試命令
a 查看函數(shù)參數(shù)
interact 啟動交互式解釋器
whatis 打印變量類型
w 打印堆棧信息
q 退出pdb

詳細(xì)說明

1、查看源代碼

命令:

l

說明:

查看當(dāng)前位置前后11行源代碼(多次會翻頁)
當(dāng)前位置在代碼中會用-->這個符號標(biāo)出來

命令:

ll

說明:

查看當(dāng)前函數(shù)或框架的所有源代碼

2、添加斷點(diǎn)

命令:

b
b lineno
b filename:lineno 
b functionname

參數(shù):

filename文件名,斷點(diǎn)添加到哪個文件
lineno斷點(diǎn)添加到哪一行
function:函數(shù)名,在該函數(shù)執(zhí)行的第一行設(shè)置斷點(diǎn)

說明:

1.不帶參數(shù)表示查看斷點(diǎn)設(shè)置
2.帶參則在指定位置設(shè)置一個斷點(diǎn)

3、添加臨時斷點(diǎn)

命令:

tbreak
tbreak lineno
tbreak filename:lineno
tbreak functionname

參數(shù):

同b

說明:

執(zhí)行一次后時自動刪除(這就是它被稱為臨時斷點(diǎn)的原因)

4、清除斷點(diǎn)

命令:

cl
cl filename:lineno
cl bpnumber [bpnumber ...]

參數(shù):

bpnumber 斷點(diǎn)序號(多個以空格分隔)

說明:

1.不帶參數(shù)用于清除所有斷點(diǎn),會提示確認(rèn)(包括臨時斷點(diǎn))
2.帶參數(shù)則清除指定文件行或當(dāng)前文件指定序號的斷點(diǎn)

5、打印變量值

命令:

p expression

參數(shù):

expression Python表達(dá)式

6、逐行調(diào)試命令

包括 s ,n , r 這3個相似的命令,區(qū)別在如何對待函數(shù)上

命令1:

s

說明:

執(zhí)行下一行(能夠進(jìn)入函數(shù)體)

命令2:

n 

說明:

執(zhí)行下一行(不會進(jìn)入函數(shù)體)

命令3:

r 

說明:

執(zhí)行下一行(在函數(shù)中時會直接執(zhí)行到函數(shù)返回處)

7、非逐行調(diào)試命令

命令1:

c 

說明:

持續(xù)執(zhí)行下去,直到遇到一個斷點(diǎn)

命令2

unt lineno

說明:

持續(xù)執(zhí)行直到運(yùn)行到指定行(或遇到斷點(diǎn))

命令3

j lineno

說明:

直接跳轉(zhuǎn)到指定行(注意,被跳過的代碼不執(zhí)行)

8、查看函數(shù)參數(shù)

命令:

a

說明:

在函數(shù)中時打印函數(shù)的參數(shù)和參數(shù)的值

9、打印變量類型

命令:

whatis expression

說明:

打印表達(dá)式的類型,常用來打印變量值

10、啟動交互式解釋器

interact

說明:

啟動一個python的交互式解釋器,使用當(dāng)前代碼的全局命名空間(使用ctrl+d返回pdb)

11、打印堆棧信息

w

說明:

打印堆棧信息,最新的幀在最底部。箭頭表示當(dāng)前幀。

12、退出pdb

q

完成了。好吧,可能超過了10分鐘,我承認(rèn)這是一個善意的謊言,不過至此你已經(jīng)掌握了,擊個掌吧。

?著作權(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)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評論 0 5
  • 你是否曾經(jīng)苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1閱讀 1,043評論 0 4
  • 昨晚我在朋友圈中發(fā)了張照片,照片中特別提到一句:這些天以來第一次下廚·作品! 沒想到,這樣一道普通得不能再普通的家...
    RainbowPeng閱讀 1,686評論 14 15
  • 2016-01-14 寶木大仙 淺白軒 我還是個孩子,我始終這么認(rèn)為,在我離開家到外求學(xué),在我踏出校門開始工作,當(dāng)...
    寶木大仙閱讀 221評論 0 0
  • 這一部分就是講Purposeful practice。開頭開門見山,之后分出小點(diǎn)具體講。Purposeful pr...
    不是貓閱讀 297評論 0 0

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