Python工具PDB調(diào)試器的使用方法詳解
pdb重要嗎?
當(dāng)然很重要。前言中提到的打印,確實(shí)是調(diào)試程序的常用手段,但是這只局限于小型程序,如果對(duì)于一個(gè)很大的程序,那每次都要運(yùn)行整個(gè)程序才能看到打印的值,顯然是我們不能接受的。對(duì)于IDE
提供的斷點(diǎn)功能確實(shí)很方便,但是對(duì)于一些vim
黨來說就的另尋方案了。 Python 的 pdb,正是其自帶的一個(gè)調(diào)試庫。它為 Python 程序提供了交互式的源代碼調(diào)試功能,是命令行版本的 IDE 斷點(diǎn)調(diào)試器,完美地解決了我們剛剛討論的這個(gè)問題。
pdb介紹
源碼:Lib/pdb.py
pdb模塊定義了一個(gè)交互式源代碼調(diào)試器,用于 Python 程序。它支持在源碼行間設(shè)置(有條件的)斷點(diǎn)和單步執(zhí)行,檢視堆棧幀,列出源碼列表,以及在任何堆棧幀的上下文中運(yùn)行任意 Python 代碼。它還支持事后調(diào)試,可以在程序控制下調(diào)用。
如何使用pdb?
啟動(dòng) PDB 調(diào)試器
要在 Python 代碼中啟動(dòng) PDB 調(diào)試器,需要在需要調(diào)試的代碼行上加入 import pdb; pdb.set_trace()
代碼。這樣,在運(yùn)行代碼時(shí),程序?qū)?huì)在此處暫停,并啟動(dòng) 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í)行以上代碼時(shí),當(dāng)程序執(zhí)行到 pdb.set_trace()
時(shí),程序?qū)?huì)暫停,并啟動(dòng) PDB 調(diào)試器。此時(shí),你可以輸入命令來查看變量、檢查堆棧、單步執(zhí)行代碼等。
當(dāng)然,還有另一種方式,像這樣:
def add_numbers(a, b): ? ?breakpoint() ? ?return a + b ? result = add_numbers(5, 10) print(result)
3.7 新版功能: 內(nèi)置函數(shù) breakpoint(),當(dāng)以默認(rèn)參數(shù)調(diào)用它時(shí),可以用來代替 import pdb; pdb.set_trace()
。
如果你是想通過命令行來啟動(dòng),當(dāng)然也是支持的,像這樣
python3 -m pdb pdb_demo.py
基本的 PDB 命令
在 PDB 調(diào)試器中,有許多命令可以使用。以下是一些最常用的 PDB 命令:
n(ext)
:單步執(zhí)行代碼s(tep)
:進(jìn)入子函數(shù)或方法r(eturn)
:執(zhí)行代碼直到當(dāng)前函數(shù)返回c(ontinue)
:繼續(xù)執(zhí)行代碼直到下一個(gè)斷點(diǎn)或程序結(jié)束l(ist)
:顯示當(dāng)前代碼段周圍的源代碼p
:打印變量的值h(elp)
:查看幫助信息- b(reak): 設(shè)置斷點(diǎn)。比如
b 10
,在第10行設(shè)置一個(gè)斷點(diǎn) 。行號(hào)可以加上文件名和冒號(hào)作為前綴,以在另一個(gè)文件中設(shè)置一個(gè)斷點(diǎn)。 - c l(ear): 清楚斷點(diǎn)
- q(uit):退出調(diào)試器。 被執(zhí)行的程序?qū)⒈恢兄埂?/li>
- restart :重啟被調(diào)試的 Python 程序。
使用 PDB 調(diào)試器調(diào)試 Python 代碼
在使用 PDB 調(diào)試器調(diào)試 Python 代碼時(shí),以下是一些常用的技巧:
- 在使用
n(ext)
或s(tep)
命令時(shí),可以在命令后加上數(shù)字,以指定要執(zhí)行多少次代碼。例如,使用n 3
命令將會(huì)執(zhí)行下三行代碼。 - 在使用
l(ist)
命令時(shí),可以在命令后加上代碼行號(hào),以指定要顯示哪一段源代碼。例如,使用l 5,10
命令將會(huì)顯示第 5 行到第 10 行的代碼。 - 在使用
p
命令時(shí),可以打印表達(dá)式的值,并以逗號(hào)分隔打印多個(gè)表達(dá)式的值。例如,使用p a, b, c
命令將會(huì)打印變量 a、b 和 c 的值。 - 在使用 PDB 調(diào)試器時(shí),你可以使用
!
命令執(zhí)行 Python 表達(dá)式。例如,使用!a + b
命令將會(huì)計(jì)算 a + b 的值。
最后
在 Python 開發(fā)過程中,PDB 調(diào)試器是一個(gè)非常有用的工具,它可以幫助你快速定位和解決代碼中的問題。除了這些常用命令,還有許多其他的命令可以使用,這里就不在一一贅述了。你可以參考對(duì)應(yīng)的官方文檔(https://docs.python.org/3/library/pdb.html#module-pdb),來熟悉這些用法。
以上就是Python中PDB調(diào)試器的使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python PDB調(diào)試器用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pytest自定義命令行參數(shù)的實(shí)現(xiàn)
本文主要介紹了在使用pytest運(yùn)行測(cè)試用例時(shí),通過傳遞自定義命令行參數(shù)來啟動(dòng)mitmdump進(jìn)程進(jìn)行抓包,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12python 自動(dòng)刷新網(wǎng)頁的兩種方法
這篇文章主要介紹了python 自動(dòng)刷新網(wǎng)頁的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Manjaro、pip、conda更換國內(nèi)源的方法
這篇文章主要介紹了Manjaro、pip、conda更換國內(nèi)源的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python gevent協(xié)程切換實(shí)現(xiàn)詳解
這篇文章主要介紹了Python gevent協(xié)程切換實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目,包括設(shè)置Python環(huán)境、安裝Flask庫以及創(chuàng)建基本的項(xiàng)目結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06Python中利用sorted()函數(shù)排序的簡單教程
這篇文章主要介紹了Python中利用sorted()函數(shù)排序的簡單教程,sorted()函數(shù)有返回值,在Python的排序?qū)崿F(xiàn)中發(fā)揮著相當(dāng)重要的作用,需要的朋友可以參考下2015-04-04Python使用pywebview開發(fā)桌面應(yīng)用的全過程
當(dāng)使用桌面應(yīng)用程序的時(shí)候,有沒有那么一瞬間,想學(xué)習(xí)一下桌面應(yīng)用程序開發(fā)?下面這篇文章主要給大家介紹了關(guān)于Python使用pywebview開發(fā)桌面應(yīng)用的相關(guān)資料,需要的朋友可以參考下2022-06-06