使用pdb進行調試:
pdb 是 python 自帶的一個包,為 python 程序提供了一種交互的源代碼調試功能,主要特性包括設置斷點、單步調試、進入函數調試、查看當前代碼、查看棧片段、動態改變變量的值等。pdb 提供了一些常用的調試命令,詳情見表 1。
表 1. pdb 常用命令
下面結合具體的實例講述如何使用 pdb 進行調試。
清單 1. 測試代碼示例
importpdba="aaa"pdb.set_trace()b="bbb"c="ccc"final=a+b+cprintfinal
開始調試:直接運行腳本,會停留在 pdb.set_trace() 處,選擇 n+enter 可以執行當前的 statement。在第一次按下了 n+enter 之后可以直接按 enter 表示重復執行上一條 debug 命令。
清單 2. 利用 pdb 調試
[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)>/root/epdb1.py(6)?()->final=a+b+c(Pdb)list1importpdb2a="aaa"3pdb.set_trace()4b="bbb"5c="ccc"6->final=a+b+c7printfinal[EOF](Pdb)[EOF](Pdb)n>/root/epdb1.py(7)?()->printfinal(Pdb)
退出 debug:使用 quit 或者 q 可以退出當前的 debug,但是 quit 會以一種非常粗魯的方式退出程序,其結果是直接 crash。
清單 3. 退出 debug
[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)qTraceback(mostrecentcalllast):File"epdb1.py",line5,in?c="ccc"File"epdb1.py",line5,in?c="ccc"File"/usr/lib64/python2.4/bdb.py",line48,intrace_dispatchreturnself.dispatch_line(frame)File"/usr/lib64/python2.4/bdb.py",line67,indispatch_lineifself.quitting:raiseBdbQuitbdb.BdbQuit
打印變量的值:如果需要在調試過程中打印變量的值,可以直接使用 p 加上變量名,但是需要注意的是打印僅僅在當前的 statement 已經被執行了之后才能看到具體的值,否則會報 NameError: < exceptions.NameError … ....> 錯誤。
清單 4. debug 過程中打印變量
[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)pb'bbb'(Pdb)'bbb'(Pdb)n>/root/epdb1.py(6)?()->final=a+b+c(Pdb)pc'ccc'(Pdb)pfinal***NameError:<exceptions.NameErrorinstanceat0x1551b710>(Pdb)n>/root/epdb1.py(7)?()->printfinal(Pdb)pfinal'aaabbbccc'(Pdb)
使用 c 可以停止當前的 debug 使程序繼續執行。如果在下面的程序中繼續有 set_statement() 的申明,則又會重新進入到 debug 的狀態,讀者可以在代碼 print final 之前再加上 set_trace() 驗證。
清單 5. 停止 debug 繼續執行程序
[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)caaabbbccc
顯示代碼:在 debug 的時候不一定能記住當前的代碼塊,如要要查看具體的代碼塊,則可以通過使用 list 或者 l 命令顯示。list 會用箭頭 -> 指向當前 debug 的語句。
清單 6. debug 過程中顯示代碼
[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)list1importpdb2a="aaa"3pdb.set_trace()4->b="bbb"5c="ccc"6final=a+b+c7pdb.set_trace()8printfinal[EOF](Pdb)c>/root/epdb1.py(8)?()->printfinal(Pdb)list3pdb.set_trace()4b="bbb"5c="ccc"6final=a+b+c7pdb.set_trace()8->printfinal[EOF](Pdb)
在使用函數的情況下進行 debug
清單 7. 使用函數的例子
importpdbdefcombine(s1,s2):#definesubroutinecombine,which...s3=s1+s2+s1#sandwichess2betweencopiesofs1,...s3='"'+s3+'"'#enclosesitindoublequotes,...returns3#andreturnsit.a="aaa"pdb.set_trace()b="bbb"c="ccc"final=combine(a,b)printfinal
如果直接使用 n 進行 debug 則到 final=combine(a,b) 這句的時候會將其當做普通的賦值語句處理,進入到 print final。如果想要對函數進行 debug 如何處理呢 ? 可以直接使用 s 進入函數塊。函數里面的單步調試與上面的介紹類似。如果不想在函數里單步調試可以在斷點處直接按 r 退出到調用的地方。
對函數進行 debug
[root@rcc-pok-idg-2255~]#pythonepdb2.py>/root/epdb2.py(10)?()->b="bbb"(Pdb)n>/root/epdb2.py(11)?()->c="ccc"(Pdb)n>/root/epdb2.py(12)?()->final=combine(a,b)(Pdb)s--Call-->/root/epdb2.py(3)combine()->defcombine(s1,s2):#definesubroutinecombine,which...(Pdb)n>/root/epdb2.py(4)combine()->s3=s1+s2+s1#sandwichess2betweencopiesofs1,...(Pdb)list1importpdb23defcombine(s1,s2):#definesubroutinecombine,which...4->s3=s1+s2+s1#sandwichess2betweencopiesofs1,...5s3='"'+s3+'"'#enclosesitindoublequotes,...6returns3#andreturnsit.78a="aaa"9pdb.set_trace()10b="bbb"11c="ccc"(Pdb)n>/root/epdb2.py(5)combine()->s3='"'+s3+'"'#enclosesitindoublequotes,...(Pdb)n>/root/epdb2.py(6)combine()->returns3#andreturnsit.(Pdb)n--Return-->/root/epdb2.py(6)combine()->'"aaabbbaaa"'->returns3#andreturnsit.(Pdb)n>/root/epdb2.py(13)?()->printfinal(Pdb)
在調試的時候動態改變值 。在調試的時候可以動態改變變量的值,具體如下實例。需要注意的是下面有個錯誤,原因是 b 已經被賦值了,如果想重新改變 b 的賦值,則應該使用! B。
清單 9. 在調試的時候動態改變值
[root@rcc-pok-idg-2255~]#pythonepdb2.py>/root/epdb2.py(10)?()->b="bbb"(Pdb)var="1234"(Pdb)b="avfe"***Thespecifiedobject'="avfe"'isnotafunctionorwasnotfoundalongsys.path.(Pdb)!b="afdfd"(Pdb)
感謝各位的閱讀!關于python中pdb的使用方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
銀行個人怎么貸款五萬?銀行個人貸款五萬可以通過信用貸款來貸,因為五萬以內的貸款都屬于小額貸款,貸款人只需要準備好申請貸款的相關證件基本上就可以申請成功。當然申請之前還需要保證本人擁有穩定的工作和固定的收入,這樣銀行才會判斷個人擁有獨立償還貸款的能力,給予貸款人相應的款項。銀行貸款5萬要什么條件?1、年滿20-55周歲,具有完全民事行為能力的自然人;具有當地常住戶口或長期居住證明,有固定的住所。2、...
(資料圖)隨著社會越來越發達,大家都選擇在網絡上汲取相關知識內容,比如摩洛哥在哪,為了更好的解答大家的問題,小編也是翻閱整理了相應內容,下面就一起來看一下吧!1、摩洛哥王國是非洲西北部的一個君主制國家。其東部與阿爾及利亞接壤,南部其實際控制的西撒哈拉地區與毛里塔尼亞緊鄰,西部濱臨大西洋,并向北隔直布羅陀海峽和地中海與葡萄牙、西班牙相望。1979年摩洛哥占領西撒哈拉,但其在西撒哈拉的權利要求一直未被...
【資料圖】在生活中,很多人都不知道國家圖書館開放時間是什么意思,其實他的意思是非常簡單的,下面就是小編搜索到的國家圖書館開放時間相關的一些知識,我們一起來學習下吧!1、總館南區:周一至周日9:00-17:00,總館北區:周一至周五9:00--21:00,周六至周日9:00--17:00,少年兒童館:周一至周日9:00--17:00,古籍館:周一至周五9:00--17:00。2、中國國家圖書館前身是...