Python內(nèi)置debug庫(kù)pdb用法示例詳解
0. 引言
pdb
(Python Debugger)是Python的內(nèi)置調(diào)試器,使用pdb
進(jìn)行調(diào)試可以幫助你深入了解程序的執(zhí)行流程和變量狀態(tài),有助于快速定位和解決問(wèn)題。通過(guò)上述常用命令和示例代碼,你可以有效地在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)行到這一行時(shí)會(huì)暫停,進(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)行程序后,程序會(huì)在pdb.set_trace()
處暫停,進(jìn)入交互式調(diào)試模式。
1.2 通過(guò)命令行啟動(dòng) pdb
可以直接從命令行啟動(dòng)pdb
進(jìn)行調(diào)試(此時(shí)不要求打斷點(diǎn)):
python -m pdb your_script.py
此時(shí)會(huì)停留在代碼第一行,然后你就可以依次 debug 所有的 python 代碼。
2. 常用命令
2.1 n (next)
執(zhí)行下一行代碼,不會(huì)進(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í)行程序,直到遇到下一個(gè)斷點(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 # 清除編號(hào)為1的斷點(diǎn)
2.9 q (quit)
退出調(diào)試器。
(Pdb) q
3. 例子
以下是一個(gè)完整的例子,展示了如何使用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)行上面的代碼,程序會(huì)在
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í)行程序,直到遇到下一個(gè)斷點(diǎn)或程序結(jié)束。
總結(jié)
到此這篇關(guān)于Python內(nèi)置debug庫(kù)pdb用法的文章就介紹到這了,更多相關(guān)Python內(nèi)置debug庫(kù):pdb用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Matplotlib 實(shí)現(xiàn)3D繪圖詳解
Matplotlib在二維繪圖的基礎(chǔ)上,構(gòu)建了一部分較為實(shí)用的3D繪圖程序包。本文將為大家詳細(xì)介紹通過(guò)調(diào)用該程序包接口繪制 3D散點(diǎn)圖、3D曲面圖、3D線框圖。感興趣的同學(xué)可以了解一下2021-11-11Flask框架的學(xué)習(xí)指南之制作簡(jiǎn)單blog系統(tǒng)
本文是Flask框架的學(xué)習(xí)指南系列文章的第二篇主要給大家講述制作一個(gè)簡(jiǎn)單的小項(xiàng)目blog系統(tǒng)的過(guò)程,有需要的小伙伴可以參考下2016-11-11Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過(guò)公共鍵對(duì)字典列表排序算法示例
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過(guò)公共鍵對(duì)字典列表排序算法,結(jié)合實(shí)例形式分析了Python基于operator模塊中的itemgetter()函數(shù)對(duì)字典進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03pycharm解決關(guān)閉flask后依舊可以訪問(wèn)服務(wù)的問(wèn)題
這篇文章主要介紹了pycharm解決關(guān)閉flask后依舊可以訪問(wèn)服務(wù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04基于Python寫(xiě)個(gè)"點(diǎn)球大戰(zhàn)"小游戲
這篇文章主要為大家詳細(xì)介紹了如何利用Python寫(xiě)個(gè)簡(jiǎn)單的"點(diǎn)球大戰(zhàn)"小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化
這篇文章主要介紹了Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09用于ETL的Python數(shù)據(jù)轉(zhuǎn)換工具詳解
這篇文章主要介紹了用于ETL的Python數(shù)據(jù)轉(zhuǎn)換工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Python 循環(huán)終止語(yǔ)句的三種方法小結(jié)
今天小編就為大家分享一篇Python 循環(huán)終止語(yǔ)句的三種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06