Pycharm 的圖形化界面雖然好用,但是在某些場景中,是無法使用的,而 Python 本身已經給我們提供了一個除錯神器 -- pdb,可能你還不知道它,為了講解這個神器,我寫了這篇文章來幫助你輕松的理解它,
1. 準備檔案
在除錯之前先將這兩個檔案準備好(做為演示用),并放在同級目錄中,
utils.py
def sum(mylist):
result = 0
for item in mylist:
result += item
return result
pdb_demo.py
import utils
def myfunc(mylist):
result = utils.sum(mylist)
print(result)
if __name__ == '__main__':
print("----start----")
myfunc([1,2,3,4])
print("----end-----")
2. 進入除錯模式
主要有兩種方法
做為腳本呼叫,方法很簡單,就像正常執行python腳本一樣,只是多加了-m pdb
ptyhon -m pdb pdb_demo.py
使用這個方式進入除錯模式,會在腳本的第一行開始單步除錯,

對于單檔案的腳本并沒有什么問題,如果是一個大型的專案,專案里有很多的檔案,使用這種方式只能大大降低我們的效率,
一般情況下,都會直接在你需要的地方打一個斷點,那如何打呢?
只需在你想要打斷點的地方加上這兩行,
import pdb
pdb.set_trace()
然后執行時,也不需要再指定-m pdb了,直接python pdb_demo.py ,就會直接在這個地方暫停,


3. 除錯指令
熟悉 Pycharm 的人都知道,我們執行下一步,執行到下一個斷點是
同樣的,pdb 也需要你更多記這樣的命令,
當你看到pdb模式的識別符號 (Pdb)時,就可以輸入這樣的命令,
我在這里將這些指令按使用頻度分為三個等級,
最常用
| 指令 | 英文 | 解釋 |
|---|---|---|
| n | Next | 下一步 |
| l | list | 列出當前斷點處原始碼 |
| p | 列印變數 | |
| s | step into | 執行當前行,可以進入函式 |
| r | return | 運行完當前函式,回傳結果 |
| c | continue | 執行到下一斷點或者結束 |
| b | break | 設定斷點 |
| q | quit | 退出程式 |
有時使用
| 指令 | 英文 | 解釋 |
|---|---|---|
| a | args | 列出當前函式的引數 |
| pp | pprint | 一種可視化更好的列印 |
| j | jump | 跳到指定行 |
| cl | clear | 清除斷點 |
| w | where | 列印當前堆疊 |
| u | up | 執行跳轉到當前堆疊的上一層 |
| unt | until | 行數遞增執行(忽略回圈和函式) |
| ll | longlist | 列出更多的原始碼 |
| run/restart | run | 重新啟動 debug(-m pdb) |
幾乎不用
| 指令 | 英文 | 解釋 |
|---|---|---|
| tbreak | temporary break | 臨時斷點 |
| disable | 停用斷點 | |
| enable | 啟用斷點 | |
| alias | 設定別名 | |
| unalias | 洗掉別名 | |
| whatis | 列印物件型別 | |
| ignore | 設定忽略的斷點 | |
| source | 列出給定物件的原始碼 |
其上全部是我翻譯自官方檔案,原文在這里:https://docs.python.org/3/library/pdb.html
其實你大可不必死記這些命令,忘記的時候,只要敲入help并回車,就可以看所有的指令了,

4. 開始除錯
這里就幾個最常用的指定,來演示一遍,

這個除錯程序,我加了些注釋,你應該能夠很輕易地理解這種除錯方式,
今天pdb的除錯內容大概就是這些,你學會了嗎?
看到上面截圖的時間了吧?是的,又是一個深夜寫的文章,希望對你會有所幫助,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195939.html
標籤:Python
