python進階: 深入了解調試利器 Pdb

Python是一種廣泛使用的編程語言,以其簡潔和可讀性著稱。在開發和調試過程中,遇到錯誤和問題是不可避免的。Python為此提供了一個強大的調試工具——Pdb(Python Debugger)

PdbPython標準庫中自帶的調試器,可以幫助開發者跟蹤代碼執行、查看變量值、設置斷點等功能。


1. 啟動 pdb 調試

方法一:命令行啟動
python -m pdb your_script.py

程序會從第一行開始暫停,進入 pdb 調試模式。

方法二:代碼中插入斷點

在需要調試的位置插入以下代碼:

import pdb; pdb.set_trace()  # Python 3.7+ 可簡寫為 breakpoint()

運行腳本時,程序會在 pdb.set_trace() 處暫停。


2. 常用命令

命令簡寫說明
nextn執行下一行(不進入函數內部)
steps進入函數內部
continuec繼續執行,直到下一個斷點或程序結束
listl顯示當前代碼位置周圍的代碼
printp打印變量值,例如 p variable
breakb設置斷點,例如 b 10(第10行)或 b function_name
wherew顯示當前調用棧(即程序執行到此處的位置路徑)
returnr執行到當前函數返回
quitq強制退出調試
helph查看命令幫助

3. 高級用法

條件斷點
b 20, condition  # 在第20行設置條件斷點,當條件滿足時暫停
# 示例:b 10, x > 5  # 當變量 x 大于5時在第10行暫停
修改變量
p x = 10  # 在調試時修改變量 x 的值為10
查看命令歷史

Enter 鍵可重復執行上一個命令。


4. 示例調試流程

假設有以下腳本 demo.py

def add(a, b):result = a + breturn resultx = 5
y = 10
import pdb; pdb.set_trace()  # 在此處暫停
total = add(x, y)
print(total)

調試步驟:

  1. 運行腳本,程序在 pdb.set_trace() 處暫停。
  2. 輸入 n 執行下一行(此時 total = add(x, y) 還未執行)。
  3. 輸入 s 進入 add 函數內部。
  4. 輸入 p result 查看 result 的值。
  5. 輸入 c 繼續執行,直到程序結束。

5. pdb.pm的使用

pdb.pm()Python 調試器 pdb 中一個非常有用的功能,它用于在程序拋出異常(未被捕獲的異常)后,自動進入調試模式,并定位到異常發生的堆棧幀(即錯誤發生的具體位置)。

def divide(a, b):return a / b
try:result = divide(5, 0)
except Exception as e:import pdb; pdb.pm()  # 捕獲異常后手動進入調試

6. 小技巧

  • 交互式執行:在調試過程中可以直接輸入變量名或表達式,例如直接輸入 x 查看其值。
  • 斷點管理:使用 break 查看所有斷點,clear 刪除斷點。
  • 跳過代碼塊:用 until 跳出循環(例如 until 15 執行到第15行)。

通過 pdb 可以逐步跟蹤代碼邏輯,檢查變量狀態,快速定位問題。熟練后可以結合 IDE 的圖形化調試工具(如 VS Code、PyCharm)提升效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77354.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React 設計藝術:如何精確拆分組件接口,實現接口隔離原則

接口隔離原則 接口隔離原則(Interface Segregation Principle,簡稱 ISP)也是面向對象設計中的重要原則之一。它的核心思想是,一個類不應該依賴它不需要的接口。在 React 開發中,遵循接口隔離原則可以提高代碼的可維護性…

內部聊天軟件,BeeWorks-安全的企業內部通訊軟件

企業在享受數據便利的同時,如何保障企業數據安全已經成為無法回避的重要課題。BeeWorks作為一款專為企業設計的內部通訊軟件,通過全鏈路的安全能力升維,為企業提供了一個安全、高效、便捷的溝通協作平臺,全面保障企業數據安全。 …

【零基礎】基于 MATLAB + Gurobi + YALMIP 的優化建模與求解全流程指南

MATLAB Gurobi YALMIP 綜合優化教程(進階) 本教程系統介紹如何在 MATLAB 環境中使用 YALMIP 建模,并通過 Gurobi 求解器高效求解線性、整數及非線性優化問題。適用于工程、運營研究、能源系統等領域的高級優化建模需求。 一、工具概覽 1.…

Freertos----互斥量

一、為什么要使用互斥量? 我們想讓任務A、B都執行add_a函數,a的最終結果是18817。 假設任務A運行完代碼①,在執行代碼②之前被任務B搶占了:現在任務A的R0等于1。 任務B執行完add_a函數,a等于9。 任務A繼續運行&#…

高級java每日一道面試題-2025年4月11日-微服務篇[Nacos篇]-Nacos使用的數據庫及其數據同步機制是什么?

如果有遺漏,評論區告訴我進行補充 面試官: Nacos使用的數據庫及其數據同步機制是什么? 我回答: Nacos 使用的數據庫及其數據同步機制詳解 在微服務架構中,Nacos 作為服務注冊與配置管理的核心組件,其數據存儲和同步機制對系統的高可用性和…

揭秘大數據 | 22、軟件定義存儲

揭秘大數據 | 19、軟件定義的世界-CSDN博客 揭秘大數據 | 20、軟件定義數據中心-CSDN博客 揭秘大數據 | 21、軟件定義計算-CSDN博客 老規矩,先把這個小系列的前三篇奉上。今天書接上文,接著敘軟件定義存儲的那些事兒。 軟件定義存儲源于VMware公司于…

git常用修改命令

1. 代碼回退與歷史修改 git reset 模式命令示例作用范圍適用場景--softgit reset --soft HEAD~1僅移動 HEAD 指針重新提交之前的修改--mixedgit reset HEAD~1 (默認)重置暫存區取消已 add 但未提交的文件--hardgit reset --hard a1b2c3d徹底丟棄工作區和暫存區徹底回退到某個…

【ubuntu】linux開機自啟動

目錄 開機自啟動: /etc/rc.loacl system V 使用/etc/rc*.d/系統運行優先級 遇到的問題: 1. Linux 系統啟動階段概述 方法1:/etc/rc5.d/ 腳本延時日志 方法二:使用 udev 規則來觸發腳本執行 開機自啟動: /etc/…

Python深度學習基礎——深度神經網絡(DNN)(PyTorch)

張量 數組與張量 PyTorch 作為當前首屈一指的深度學習庫,其將 NumPy 數組的語法盡數吸收,作為自己處理張量的基本語法,且運算速度從使用 CPU 的數組進步到使用 GPU 的張量。 NumPy 和 PyTorch 的基礎語法幾乎一致,具體表現為&am…

光伏產品研發項目如何降本增效?8Manage 項目管理軟件在復合材料制造的應用

在復合材料制造領域,特別是光伏PECVD石墨舟和燃料電池石墨雙極板等高精尖產品的研發過程中,高效的項目管理直接決定了產品開發周期、質量和市場競爭力。然而,許多企業在項目立項、進度跟蹤、資源分配和質量控制等環節面臨挑戰。 針對這些痛點…

linux的glib庫使用

glib常用接口使用 1. glib介紹2. glib命令安裝3. 獲取glib的版本信息和兼容信息4. glib使用例子4.1 鏈表例子4.2 哈希表例子4.3 使用面向對象例子 1. glib介紹 廣泛應用于桌面環境、嵌入式系統、GNOME等項目中。它提供了完整的面向對象編程模型(GObject&#xff09…

vs2022使用git方法

1、創建git 2、在cmd下執行 git push -f origin master ,會把本地代碼全部推送到遠程,同時會覆蓋遠程代碼。 3、需要設置【Git全局設置】,修改的代碼才會顯示可以提交,否則是灰色的不能提交。 4、創建的分支,只要點擊…

SAP ECCS 標準報表 切換為EXCEL電子表格模式

在解決《SAP ECCS標準報表在報表中不存在特征CG細分期間 消息號 GK715報錯分析》問題過程中通過DEBUG方式參照測試環境補錄數據后,不再報GK715錯誤,此時用戶要的很急,要出季報。要求先把數據導出供其分析出季報。 采用導出列表方式&#xff…

基于 Python 和 OpenCV 技術的疲勞駕駛檢測系統(2.0 全新升級,附源碼)

大家好,我是徐師兄,一個有著7年大廠經驗的程序員,也是一名熱衷于分享干貨的技術愛好者。平時我在 CSDN、掘金、華為云、阿里云和 InfoQ 等平臺分享我的心得體會。 🍅文末獲取源碼聯系🍅 2025年最全的計算機軟件畢業設計…

MATLAB項目實戰(一)

題目: 某公司有6個建筑工地要開工,每個工地的位置(用平面坐標系a,b表示,距離單位:km)及水泥日用量d(t)由下表給出.目前有兩個臨時料場位于A(5,1),B(2,7),日儲…

[250417] Fedora 42 正式發布,搭載 Linux 6.14 內核和 GNOME 48 桌面環境

目錄 Fedora 42 正式發布全新的 Anaconda Web UI 安裝程序KDE Plasma 榮升官方版本 (Edition)全新 Fedora COSMIC Spin 登場GNOME 48 桌面環境更新其他重要改進獲取與升級 Fedora 42 正式發布 Fedora Linux 42 現已正式發布!此版本基于最新的 Linux 內核 6.14 構建…

開源技術如何助力中小企業實現財務管理自主化?

中小企業的數字化困境與開源機遇 國際數據公司(IDC)研究顯示,全球67%的中小企業因高昂的軟件成本和僵化的功能設計,未能有效推進數字化轉型。傳統商業軟件常面臨三大矛盾: 功能冗余與核心需求缺失:標準化系…

JVM考古現場(二十二):降維打擊·用二向箔優化內存模型

"警報!三維堆內存正在經歷二維化坍縮!" 我腰間的玄鐵令突然震動,在蜀山劍派的量子劍陣中投射出詭異的曼德博分形——這是三體文明發動降維打擊的鐵證! 楔子:二向箔奇點降臨 昆侖鏡監控日志: // …

詳細解釋MCP項目中安裝命令 bunx 和 npx區別

詳細解釋 bunx 和 npx 1. bunx bunx 是 Bun 的一個命令行工具,用于自動安裝和運行來自 npm 的包。它是 Bun 生態系統中類似于 npx 或 yarn dlx 的工具。以下是 bunx 的主要特點和使用方法: 自動安裝和運行: bunx 會自動從 npm 安裝所需的包…

Docker詳細使用

Docker詳細使用 文章目錄 Docker詳細使用使用場景docker安裝常用命令幫助啟動類命令鏡像命令網絡命令容器命令compose(服務編排) 功能列表存儲(掛載本地)介紹使用?錄掛載卷映射 網絡介紹使用 DockerfileCompose介紹使用 使用場景…