源**:lib/pdb.py
先來重點乾貨,常用命令 ** https:
6844903847626801159
先簡單介紹一下使用命令,這裡不用記住,等用到的時候回來查就行。
1 進入命令列debug模式,python -m pdb ***.py
2 h:(help)幫助
3 w:(where)列印當前執行堆疊
4 d:(down)執行跳轉到在當前堆疊的深一層(個人沒覺得有什麼用處)
6 b:(break)新增斷點
b 列出當前所有斷點,和斷點執行到統計次數
b line_no:當前指令碼的line_no行新增斷點
b filename:line_no:指令碼filename的line_no行新增斷點
b function:在函式function的第一條可執行語句處新增斷點
複製**
7 tbreak:(temporary break)臨時斷點
在第一次執行到這個斷點之後,就自動刪除這個斷點,用法和b一樣
複製**
8 cl:(clear)清除斷點
cl 清除所有斷點
cl bpnumber1 bpnumber2.
.. 清除斷點號為bpnumber1,bpnumber2.
..的斷點
cl lineno 清除當前指令碼lineno行的斷點
cl filename:line_no 清除指令碼filename的line_no行的斷點
複製**
9 disable:停用斷點,引數為bpnumber,和cl的區別是,斷點依然存在,只是不啟用
10 enable:啟用斷點,引數為bpnumber
如果本句是函式呼叫,則s會執行到函式的第一句
複製**
如果本句是函式呼叫,則執行函式,接著執行當前執行語句的下一條。
複製**
13 r:(return)執行當前執行函式到結束
15 l:(list)列出原始碼
l 列出當前執行語句周圍11條**
l first 列出first行周圍11條**
l first second 列出first-
-second範圍的**,如果second複製**
16 a:(args)列出當前執行函式的函式
17 p expression:(print)輸出expression的值
18 pp expression:好看一點的p expression
19 run:重新啟動debug,相當於restart
20 q:(quit)退出debug
21 j lineno:(jump)設定下條執行的語句函式
只能在堆疊的最底層跳轉,向後重新執行,向前可直接執行到行號
複製**
23)condition bpnumber conditon,給斷點設定條件,當引數condition返回true的時候bpnumber斷點有效,否則bpnumber斷點無效
pdb
模組定義了乙個互動式源**偵錯程式,用於 python 程式。它支援在原始碼行間設定(有條件的)斷點和單步執行,檢視堆疊幀,列出原始碼列表,以及在任何堆疊幀的上下文中執行任意 python **。它還支援事後除錯,可以在程式控制下呼叫。
偵錯程式是可擴充套件的——偵錯程式實際被定義為pdb
類。該類目前沒有文件,但通過閱讀原始碼很容易理解它。擴充套件介面使用了bdb
和cmd
模組。
偵錯程式的提示符是(pdb)
。在偵錯程式的控制下執行程式的典型用法是:
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> (0)?()
(pdb) continue
> (1)?()
(pdb) continue
nameerror: 'spam'
> (1)?()
(pdb)
在 3.3 版更改: 由readline
模組實現的 tab 補全可用於補全本模組的命令和命令的引數,例如,tab 補全會提供當前的全域性變數和區域性變數,用作p
命令的引數。
也可以將pdb.py
作為指令碼呼叫,來除錯其他指令碼。例如:
python3 -m pdb myscript.py
當作為指令碼呼叫時,如果要除錯的程式異常退出,pdb 除錯將自動進入事後除錯。事後除錯之後(或程式正常退出之後),pdb 將重新啟動程式。自動重啟會保留 pdb 的狀態(如斷點),在大多數情況下,這比在退出程式的同時退出偵錯程式更加實用。
3.2 新版功能:pdb.py
現在接受-c
選項,可以執行命令,這與將該命令寫入.pdbrc
檔案相同,請參閱 偵錯程式命令。
3.7 新版功能:pdb.py
現在接受-m
選項,該選項用於執行乙個模組,類似於python3 -m
。與指令碼相同,偵錯程式將暫停在待執行模組第一行前。
從正在執行的程式進入偵錯程式的典型用法是插入
import pdb; pdb.set_trace()
到你想進入偵錯程式的位置。然後就可以單步執行上述語句之後的**,要關閉偵錯程式繼續執行,請使用continue
命令。
3.7 新版功能: 內建函式breakpoint()
,當以預設引數呼叫它時,可以用來代替import pdb; pdb.set_trace()
。
檢查已崩潰程式的典型用法是:
>>> import pdb
>>> import mymodule
>>> mymodule.test()
traceback (most recent call last):
file "", line 1, in file "./mymodule.py", line 4, in test
test2()
file "./mymodule.py", line 3, in test2
print(spam)
nameerror: spam
>>> pdb.pm()
> ./mymodule.py(3)test2()
-> print(spam)
(pdb)
本模組定義了下列函式,每個函式進入偵錯程式的方式略有不同:
run*
函式和set_trace()
都是別名,用於例項化pdb
類和呼叫同名方法。如果要使用其他功能,則必須自己執行以下操作:
(pdb)a #檢視全部棧內變數
(pdb)w 列出目前call stack 中的所在層。
(pdb)d 在call stack中往下移一層
(pdb)u 在call stack中往上移一層。如果在上移一層之後按下 n ,則會在上移之後的一層執行下乙個敘述,之前的 function call 就自動返回。
下方列出的是偵錯程式可接受的命令。如下所示,大多數命令可以縮寫為乙個或兩個字母。如h(elp)
表示可以輸入h
或help
來輸入幫助命令(但不能輸入he
或hel
,也不能是h
或help
或help
)。命令的引數必須用空格(空格符或製表符)分隔。在命令語法中,可選引數括在方括號 (
) 中,使用時請勿輸入方括號。命令語法中的選擇項由豎線 (|
) 分隔。
輸入乙個空白行將重複最後輸入的命令。例外:如果最後乙個命令是list
命令,則會列出接下來的 11 行。
偵錯程式無法識別的命令將被認為是 python 語句,並在正在除錯的程式的上下文中執行。python 語句也可以用感嘆號 (!
) 作為字首。這是檢查正在除錯的程式的強大方法,甚至可以修改變數或呼叫函式。當此類語句發生異常,將列印異常名稱,但偵錯程式的狀態不會改變。
偵錯程式支援 別名。別名可以有引數,使得偵錯程式對被檢查的上下文有一定程度的適應性。
在一行中可以輸入多個命令,以;;
分隔。(不能使用單個;
,因為它用於分隔傳遞給 python 直譯器的一行中的多條語句。)切分命令很無腦,總是在第乙個;;
對處將輸入切分開,即使它位於帶引號的字串之中。
如果檔案.pdbrc
存在於使用者主目錄或當前目錄中,則將其讀入並執行,等同於在偵錯程式提示符下鍵入該檔案。這對於別名很有用。若兩個檔案都存在則首先讀取主目錄中的檔案,且本地檔案可以覆蓋其中定義的別名。
在 3.2 版更改:.pdbrc
現在可以包含繼續除錯的命令,如continue
或next
。檔案中的這些命令以前是無效的。
更詳細的介紹可參考 10分鐘教程掌握python偵錯程式pdb
python pdb斷點除錯
pdb 是 python 的乙個內建模組,用於命令列來除錯 python 使用介紹 說到 debug,肯定是要新增斷點的,這裡有兩種方式新增斷點 1.在想要斷點 後新增 一行 pdb.set trace 若是使用這種方式,直接執行 python 檔案即可進入斷點除錯。2.用命令列來新增斷點 b li...
python pdb 斷點除錯
import pdb pdb.set trace a args 列出當前執行函式的函式 p expression print 輸出expression的值 eg p list map lambda x x.lower manager ssids u 40 mgmt u 123 u 112 u 112...
初學python pdb除錯命令
pdb除錯命令 完整命令 簡寫命令 描述args a列印當前函式的引數 break b設定斷點 clear cl清除斷點 condition 無設定條件斷點 continue c或者cont 繼續執行,知道遇到斷點或者指令碼結束 disable 無禁用斷點 enable 無啟用斷點 help h檢視...