1. 程式人生 > >使用PDB除錯Python程式的完整實踐

使用PDB除錯Python程式的完整實踐

從Java一路走來,習慣了使用IDEA來除錯程式碼,平時寫python也都是使用Jupyter notebook,但是現在逐漸轉行到Python開發,突然在linux下進行python程式碼除錯,就會顯得有點不習慣了。

下面先從python除錯工具PDB開始。

介紹

在開發簡單程式的時候,可以通過加入print或是log的方式進行程式的除錯,但是對於複雜的程式這種方式往往比較困難,這時就需要引入一種可以進行單步除錯以及可以方便檢視變數的方法來進行程式問題的排查,Python 的pdb就是用來解決這個問題的。

python -m pdb run.py

一般在程式中加入下面程式碼,即可進入pdb除錯:

import pdb  
pdb.set_trace()

常用命令:

  • h(elp),會列印當前版本Pdb可用的命令,如果要查詢某個命令,可以輸入 h [command],例如:“h l” — 檢視list命令
  • l(ist),可以列出當前將要執行的程式碼塊
  • b(reak), 設定斷點,例如 “b 77″,就是在當前指令碼的77行打上斷點,還能輸入函式名作為引數,斷點就打到具體的函式入口,如果只敲b,會顯示現有的全部斷點
  • condition bpnumber [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),退出除錯