Python工具PDB調(diào)試器的使用方法詳解
pdb重要嗎?
當然很重要。前言中提到的打印,確實是調(diào)試程序的常用手段,但是這只局限于小型程序,如果對于一個很大的程序,那每次都要運行整個程序才能看到打印的值,顯然是我們不能接受的。對于IDE提供的斷點功能確實很方便,但是對于一些vim黨來說就的另尋方案了。 Python 的 pdb,正是其自帶的一個調(diào)試庫。它為 Python 程序提供了交互式的源代碼調(diào)試功能,是命令行版本的 IDE 斷點調(diào)試器,完美地解決了我們剛剛討論的這個問題。
pdb介紹
源碼:Lib/pdb.py
pdb模塊定義了一個交互式源代碼調(diào)試器,用于 Python 程序。它支持在源碼行間設置(有條件的)斷點和單步執(zhí)行,檢視堆棧幀,列出源碼列表,以及在任何堆棧幀的上下文中運行任意 Python 代碼。它還支持事后調(diào)試,可以在程序控制下調(diào)用。
如何使用pdb?
啟動 PDB 調(diào)試器
要在 Python 代碼中啟動 PDB 調(diào)試器,需要在需要調(diào)試的代碼行上加入 import pdb; pdb.set_trace() 代碼。這樣,在運行代碼時,程序?qū)诖颂帟和?,并啟?PDB 調(diào)試器。
例如,以下代碼演示了如何使用 PDB 調(diào)試器調(diào)試 Python 代碼:
import pdb ? def add_numbers(a, b): ? ?pdb.set_trace() ? ?return a + b ? result = add_numbers(5, 10) print(result)
在執(zhí)行以上代碼時,當程序執(zhí)行到 pdb.set_trace() 時,程序?qū)和?,并啟?PDB 調(diào)試器。此時,你可以輸入命令來查看變量、檢查堆棧、單步執(zhí)行代碼等。
當然,還有另一種方式,像這樣:
def add_numbers(a, b): ? ?breakpoint() ? ?return a + b ? result = add_numbers(5, 10) print(result)
3.7 新版功能: 內(nèi)置函數(shù) breakpoint(),當以默認參數(shù)調(diào)用它時,可以用來代替 import pdb; pdb.set_trace()。
如果你是想通過命令行來啟動,當然也是支持的,像這樣
python3 -m pdb pdb_demo.py
基本的 PDB 命令
在 PDB 調(diào)試器中,有許多命令可以使用。以下是一些最常用的 PDB 命令:
n(ext):單步執(zhí)行代碼s(tep):進入子函數(shù)或方法r(eturn):執(zhí)行代碼直到當前函數(shù)返回c(ontinue):繼續(xù)執(zhí)行代碼直到下一個斷點或程序結束l(ist):顯示當前代碼段周圍的源代碼p:打印變量的值h(elp):查看幫助信息- b(reak): 設置斷點。比如
b 10,在第10行設置一個斷點 。行號可以加上文件名和冒號作為前綴,以在另一個文件中設置一個斷點。 - c l(ear): 清楚斷點
- q(uit):退出調(diào)試器。 被執(zhí)行的程序?qū)⒈恢兄埂?/li>
- restart :重啟被調(diào)試的 Python 程序。
使用 PDB 調(diào)試器調(diào)試 Python 代碼
在使用 PDB 調(diào)試器調(diào)試 Python 代碼時,以下是一些常用的技巧:
- 在使用
n(ext)或s(tep)命令時,可以在命令后加上數(shù)字,以指定要執(zhí)行多少次代碼。例如,使用n 3命令將會執(zhí)行下三行代碼。 - 在使用
l(ist)命令時,可以在命令后加上代碼行號,以指定要顯示哪一段源代碼。例如,使用l 5,10命令將會顯示第 5 行到第 10 行的代碼。 - 在使用
p命令時,可以打印表達式的值,并以逗號分隔打印多個表達式的值。例如,使用p a, b, c命令將會打印變量 a、b 和 c 的值。 - 在使用 PDB 調(diào)試器時,你可以使用
!命令執(zhí)行 Python 表達式。例如,使用!a + b命令將會計算 a + b 的值。
最后
在 Python 開發(fā)過程中,PDB 調(diào)試器是一個非常有用的工具,它可以幫助你快速定位和解決代碼中的問題。除了這些常用命令,還有許多其他的命令可以使用,這里就不在一一贅述了。你可以參考對應的官方文檔(https://docs.python.org/3/library/pdb.html#module-pdb),來熟悉這些用法。
以上就是Python中PDB調(diào)試器的使用方法詳解的詳細內(nèi)容,更多關于Python PDB調(diào)試器用法的資料請關注腳本之家其它相關文章!
相關文章
python_array[0][0]與array[0,0]的區(qū)別詳解
今天小編就為大家分享一篇python_array[0][0]與array[0,0]的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化
pandas處理幾百兆的dataframe是沒有問題的,但是我們在處理幾個G甚至更大的數(shù)據(jù)時,就會特別占用內(nèi)存,對內(nèi)存小的用戶特別不好,所以對數(shù)據(jù)進行壓縮是很有必要的,本文就介紹了python DataFrame內(nèi)存優(yōu)化,感興趣的可以了解一下2021-07-07
Python將二維列表list的數(shù)據(jù)輸出(TXT,Excel)
這篇文章主要介紹了Python將二維列表list的數(shù)據(jù)輸出(TXT,Excel),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04
使用Python搭建輕量級靜態(tài)網(wǎng)頁服務器的示例詳解
這篇文章主要為大家詳細介紹了如何使用Python搭建一個輕量級靜態(tài)網(wǎng)頁服務器,零基礎也能實現(xiàn)的Web開發(fā)初體驗,感興趣的小伙伴可以跟隨小編一起學習一下2025-07-07
Python Threading 線程/互斥鎖/死鎖/GIL鎖
這篇文章主要介紹了Python Threading 線程/互斥鎖/死鎖/GIL鎖的相關知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07

