當你的代碼寫得多了,你總會出現這樣或者那樣的錯誤,有時候代碼突然可以用,有時候代碼又突然傻逼,有時候你只是離開一會,它就自動好了…就像女生的心思,總是讓人捉摸不透,總是那麼的魔幻。
今天,小帥b來跟你說說 debug ,其實 debug 還是挺重要的,它除了可以幫助你自己發現代碼自身的 bug 之外,你還可以通過 debug 清楚的知道代碼的執行流程,比如變量是怎麼賦值的,數據是如何改變的等等,你都可以通過 debug 手段清楚的看到這些玩意的變化。
除此之外,當你在學習一個新的庫或者新的代碼特性的時候,debug 也是常用的學習手段,因為你可以通過它更容易理解代碼為什麼是那樣寫的。
接下來我會跟你說說 Python 內置的 debug 工具 pdb 的使用。
我們先來看看這樣的例子:
很簡單,這裡我們定義了個方法,然後傳遞參數 name 返回一個字符串。
不過你可以看到第二行調了一個 breakpoint 方法,這是打斷點的意思,它是 Python 內置的,直接調用即可,接著我們來運行一下這個 py:
這時候可以看到:
第一行:> 後面告訴我們打斷點的位置
第二行:-> 就是此刻 Python 執行到的暫停位置(因為我們在此前打了斷點了)
第三行:(pdb):意思是說我們可以使用 pdb 這個工具的相關命令了。
如果你不知道如何使用 pdb 的調試命令,可以輸入 help 得到相關的幫助:
在這裡我跟你說下 pdb 常常會用到的幾個命令的意思:
1、p + 參數 :查看參數的值
2、n :單步跳過
3、s :單步進入
4、c :繼續執行
5、w :顯示上下文信息
6、a :查看函數的參數列表
7、ll : 列出當前的源碼
8、b : 設置斷點
9、q : 退出 debug
比如現在我們想知道參數 name 的值是什麼,我們就可以這樣:
顯示參數:
顯示上下文信息:
執行當前代碼(單步進入):
繼續執行:
在 debug 的過程中,你還可以修改參數的值,比如把 name 直接改成 sb:
列出當前的源碼:
我剛給你演示的這些是在 Python3.8 版本下執行的,如果你用的是 Python 3.7 以下的版本,是用不了 breakpoint 這個函數的:
所以如果想要在 Python3.7 以下的版本使用 pdb ,那麼你就需要自行導入了,並且你要打斷點的話應該調用的是 set_trace():
那麼這個時候,你就可以在 Python3.7 以下的版本使用 pdb 了:
當然,你還可以什麼斷點都不設置,使用命令的方式執行 pdb ,比如我們把剛剛的斷點都去掉:
接著我們通過 pdb 命令來執行它:
python3 -m pdb xxx.py
這時候可以看到,它是直接從第一行開始打斷點:
哦對了,如果你使用 VIM 編輯器的話,可以使用 repl 插件結合 ipdb 實現調試,像我這樣:
ok,以上,希望對你有幫助,我們下回見,peace!