Python詳解之調試:pdb

如果使用過微軟技術的朋友應該體會過微軟的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),退出調試