Python詳解之調試:pdb
- 2020 年 1 月 9 日
- 筆記
如果使用過微軟技術的朋友應該體會過微軟的Visual Studio系列IDE給debug程式帶來的方便,換了個工作就沒有Visual Studio了,對於我這種從未在非GUI環境下調試過程式的人來說實在有點不爽,今天花了點時間看了一下Python自帶的pdb庫,發現用pdb來調 試程式還是很方便的,當然了,什麼遠程調試,多執行緒之類,pdb是搞不定的。
用pdb調試有多種方式可選:
1. 命令行啟動目標程式,加上-m參數,這樣調用myscript.py的話斷點就是程式的執行第一行之前 python -m pdb myscript.py
2. 在Python交互環境中啟用調試 >>> import pdb >>> import mymodule >>> pdb.run(『mymodule.test()』)
3. 比較常用的,就是在程式中間插入一段程式,相對於在一般IDE裡面打上斷點然後啟動debug,不過這種方式是hardcode的
if __name__ == "__main__": a = 1 import pdb pdb.set_trace() b = 2 c = a + b print (c)
然後正常運行腳本,到了pdb.set_trace()那就會定下來,就可以看到調試的提示符(Pdb)了
常用的調試命令
- > h(elp),會列印當前版本Pdb可用的命令,如果要查詢某個命令,可以輸入 h [command],例如:「h l」 — 查看list命令
- > l(ist),可以列出當前將要運行的程式碼塊
- > b(reak), 設置斷點,例如 「b 77″,就是在當前腳本的77行打上斷點,還能輸入函數名作為參數,斷點就打到具體的函數入口,如果只敲b,會顯示現有的全部斷點
- > condition bpnumber [condition],設置條件斷點。例如對第4個斷點加上條件「a==3」: condition 4 a==3
- > cl(ear),如果後面帶有參數,就是清除指定的斷點(我在Python2.4上從來沒成功過!!!);如果不帶參數就是清除所有的斷點
- > disable/enable,禁用/激活斷點
- > n(ext),讓程式運行下一行,如果當前語句有一個函數調用,用n是不會進入被調用的函數體中的
- > s(tep),跟n相似,但是如果當前有一個函數調用,那麼s會進入被調用的函數體中
- > c(ont(inue)),讓程式正常運行,直到遇到斷點
- > j(ump),讓程式跳轉到指定的行
- > a(rgs),列印當前函數的參數
- > p,最有用的命令之一,列印某個變數
- > !,感嘆號後面跟著語句,可以直接改變某個變數
- > q(uit),退出調試