Python內(nèi)置debug庫pdb用法示例詳解
0. 引言
pdb(Python Debugger)是Python的內(nèi)置調(diào)試器,使用pdb進(jìn)行調(diào)試可以幫助你深入了解程序的執(zhí)行流程和變量狀態(tài),有助于快速定位和解決問題。通過上述常用命令和示例代碼,你可以有效地在Python項(xiàng)目中使用pdb進(jìn)行調(diào)試。
下面是pdb的一些常用功能和用法的詳細(xì)介紹。
1. 基本用法
1.1 設(shè)置斷點(diǎn)
要使用pdb調(diào)試Python代碼,可以在需要調(diào)試的地方插入pdb.set_trace(),程序運(yùn)行到這一行時會暫停,進(jìn)入調(diào)試模式。
例子
import pdb
def add(a, b):
return a + b
def main():
x = 10
y = 20
pdb.set_trace() # 設(shè)置斷點(diǎn)
result = add(x, y)
print(f"Result: {result}")
if __name__ == "__main__":
main()
運(yùn)行程序后,程序會在pdb.set_trace()處暫停,進(jìn)入交互式調(diào)試模式。

1.2 通過命令行啟動 pdb
可以直接從命令行啟動pdb進(jìn)行調(diào)試(此時不要求打斷點(diǎn)):
python -m pdb your_script.py
此時會停留在代碼第一行,然后你就可以依次 debug 所有的 python 代碼。
2. 常用命令
2.1 n (next)
執(zhí)行下一行代碼,不會進(jìn)入函數(shù)內(nèi)部。
(Pdb) n
2.2 s (step)
進(jìn)入當(dāng)前行調(diào)用的函數(shù)。
(Pdb) s
2.3 c (continue)
繼續(xù)執(zhí)行程序,直到遇到下一個斷點(diǎn)。
(Pdb) c
2.4 l (list)
顯示當(dāng)前代碼行以及周圍的代碼。
(Pdb) l
2.5 p (print)
打印變量的值。
(Pdb) p x
2.6 h (help)
顯示幫助信息。
(Pdb) h
2.7 b (break)
設(shè)置斷點(diǎn),可以在指定行或指定函數(shù)處設(shè)置斷點(diǎn)。
(Pdb) b 12 # 在第12行設(shè)置斷點(diǎn) (Pdb) b add # 在add函數(shù)處設(shè)置斷點(diǎn)
2.8 cl (clear)
清除斷點(diǎn)。
(Pdb) cl 1 # 清除編號為1的斷點(diǎn)
2.9 q (quit)
退出調(diào)試器。
(Pdb) q
3. 例子
以下是一個完整的例子,展示了如何使用pdb進(jìn)行調(diào)試:
import pdb
def add(a, b):
return a + b
def multiply(a, b):
return a * b
def main():
x = 10
y = 20
pdb.set_trace() # 設(shè)置斷點(diǎn)
sum_result = add(x, y)
mul_result = multiply(x, y)
print(f"Sum: {sum_result}")
print(f"Product: {mul_result}")
if __name__ == "__main__":
main()
運(yùn)行程序并調(diào)試:
運(yùn)行程序: 直接運(yùn)行上面的代碼,程序會在
pdb.set_trace()的下一行處暫停。查看代碼: 使用
l命令查看當(dāng)前代碼行和周圍的代碼。
(Pdb) l

- 打印變量值: 使用
p命令打印變量的值。
(Pdb) p x 10 (Pdb) p y 20
- 單步執(zhí)行: 使用
n命令執(zhí)行下一行代碼。
(Pdb) n
> /xx/test_pdb.py(11)main()
-> print(f"Result: {result}")
- 繼續(xù)執(zhí)行: 使用
c命令繼續(xù)執(zhí)行程序,直到遇到下一個斷點(diǎn)或程序結(jié)束。
總結(jié)
到此這篇關(guān)于Python內(nèi)置debug庫pdb用法的文章就介紹到這了,更多相關(guān)Python內(nèi)置debug庫:pdb用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文深入了解Python中的property動態(tài)屬性機(jī)制
作為Python中最為強(qiáng)大也最為神秘的概念之一,元類(metaclass)賦予了開發(fā)者"修改類創(chuàng)建過程"的超能力,而在我們正式踏入元類殿堂之前,必須首先掌握一個基礎(chǔ)而重要的概念property動態(tài)屬性,本文深入探討了Python中的property動態(tài)屬性機(jī)制,需要的朋友可以參考下2026-02-02
python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸
這篇文章主要介紹了python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸,文件包括文本,圖片,視頻等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法
這篇文章主要介紹了在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Python自動重新加載模塊詳解(autoreload module)
這篇文章主要介紹了Python自動重新加載模塊詳解(autoreload module),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
OpenCV圖像梯度處理與邊緣檢測的實(shí)戰(zhàn)指南
本文主要介紹了OpenCV圖像梯度處理與邊緣檢測的實(shí)戰(zhàn)指南,包括自定義卷積核、Sobel、Laplacian和Canny算法,文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下2025-07-07

