当前位置: 首页 > article >正文

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)提升效率。

相关文章:

python进阶: 深入了解调试利器 Pdb

Python是一种广泛使用的编程语言,以其简洁和可读性著称。在开发和调试过程中,遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb(Python Debugger)。 Pdb是Python标准库中自带的调试器,可以帮助…...

4.黑马学习笔记-SpringMVC(P43-P47)

1.SpringMVC简介 SpringMVC技术(更少的代码,简便)与servlet技术功能相同,属于web层开发技术。 SpringMVC是一种基于java实现MVC模型的轻量级web框架。 轻量级指的是(内存占用比较低,运行效率高)…...

【文件操作与IO】详细解析文件操作与IO (一)

本篇博客给大家带来的是文件操作的知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 一. …...

PMP考试费能报销吗?报销流程是什么?

最近也是到了6月和8月PMP考试的报名高峰期,后台有小伙伴最常问的问题就是,PMP考试费比较贵,能不能报销?报销流程是什么? 先给大家分享一下最新PMP报名消息和考试信息: 添加图片注释,不超过 140…...

机器学习05-CNN

CNN(卷积神经网络)学习文档 一、引言 卷积神经网络(Convolutional Neural Network,CNN)是深度学习中的一种重要网络结构,在图像识别、计算机视觉等领域取得了巨大成功。CNN 的设计灵感来源于生物视觉系统…...

c++ string构造函数和assign函数

c string构造函数和assign函数 #include <iostream> #include <stdlib.h> #include <string> #include <string.h>int main() {char buff[10] {a,b,c,d,e,f,g,h,i,\0};std::string str1;str1.assign(&buff[0],0,10);int length str1.length();i…...

学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、GlitchPass渲染通道)

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.EffectComposer 后期…...

物联网通信协议——TCP与MQTT的对比

在物联网通信中&#xff0c;MQTT和TCP的实现方式和原理完全不同&#xff0c;因为两者属于协议栈的不同层级&#xff0c;解决的问题也不同。以下从协议层级、工作机制和典型场景三个角度详细解释&#xff1a; 1. 协议层级与定位 特性TCPMQTT协议层级传输层&#xff08;第4层&am…...

docker部署springboot(eureka server)项目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…...

第 7 期:DDPM 采样提速方案:从 DDPM 到 DDIM

本期关键词:采样加速、DDIM 推导、可控性提升、伪逆过程、代码实战 前情回顾:DDPM 的采样瓶颈 在前几期中,我们构建了一个完整的 DDPM 生成流程。但是你可能已经发现: 生成一张图像太慢了!!! 原因是: DDPM 要在 T 个时间步中一步步地去噪,从 x_T → x_0。而通常 T 至…...

1panel第三方应用商店(本地商店)配置和使用

文章目录 引言资源网站实战操作说明 引言 1Panel 提供了一个应用提交开发环境&#xff0c;开发者可以通过提交应用的方式将自己的应用推送到 1Panel 的应用商店中&#xff0c;供其他用户使用。由此衍生了一种本地应用商店的概念&#xff0c;用户可以自行编写应用配置并上传到自…...

Docker Image export and load and tag

# 在国外服务器保存Docker镜像 docker save myimage > myimage.tar # 将tar文件传输到国内服务器 scp myimage.tar root192.0.2.0:/home # 在国内服务器加载Docker镜像 cd /home docker load < myimage.tar # 查看镜像 docker images #docker 镜像名 tag 为none 的解决方…...

七牛使用任务工作流对音频进行转码

最近工作中有对音频转码的需求&#xff0c;比如 iOS 设备中对 ogg 格式的语音支持力度不够&#xff0c;那么可以讲ogg转码成mp3格式,下面来介绍一下&#xff0c;如果通过七牛&#xff0c;后端自行转码&#xff0c;不需要前端做任何事情。 假设我们存在一个音频的 url&#xff…...

Excel提取图片并自动上传到文件服务器(OOS),获取文件链接

Excel提取图片并自动上传到接口 在实际项目中&#xff0c;我们可能经常会遇到需要批量从Excel文件&#xff08;.xlsx&#xff09;中提取图片并上传到特定接口的场景。今天&#xff0c;我就详细介绍一下如何使用Python实现这一功能&#xff0c;本文会手把手教你搭建一个完整的解…...

基于springBoot+vue的PC 端学习系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;在疫…...

JVM对象创建全过程

JVM对象创建全过程深度解析 1. 对象创建的整体流程 JVM创建对象的过程可以分为7个关键步骤&#xff0c;从类检查到内存分配&#xff0c;再到对象初始化&#xff1a; 类加载检查 → 内存分配 → 内存空间初始化 → 对象头设置 → 构造函数执行 → 栈帧引用建立 → 对象使用2.…...

Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客

大家好呀&#xff01;&#x1f44b; 今天我们要聊一个超级重要的Spring Boot话题 - 那个神奇的主类注解SpringBootApplication&#xff01;很多小伙伴可能每天都在用Spring Boot开发项目&#xff0c;但你真的了解这个注解背后的秘密吗&#xff1f;&#x1f914; 别担心&#x…...

【Python爬虫基础篇】--1.基础概念

目录 1.爬虫--定义 2.爬虫--组成 3.爬虫--URL 1.爬虫--定义 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。随着网络的迅速发展&#xff0c;万维网成为大量信息的载体…...

CSS进度条带斑马纹动画(有效果图)

效果图 .wxml <view class"tb"><view class"tb-line" style"transform:translateX({{w%}})" /> </view> <button bind:tap"updateLine">增加进度</button>.js Page({data: {w:0,},updateLine(){this.…...

文件二进制读写和文本读写以及编码解码

假如是utf8编码&#xff0c;windows系统 写&#xff1a;往键盘中写的字符会被utf8编码成字节写入文件。假如是文本写&#xff0c;\n会被替换为\r\n写入&#xff0c;结尾会加文件结束符EOF。假如是二进制写&#xff0c;\n就是\n&#xff0c;文件结尾也不会加什么EOF 读&#xff…...

HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多

一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…...

获取印度股票市场列表、查询IPO信息以及通过WebSocket实时接收数据

为了对接印度股票市场&#xff0c;获取市场列表、查询IPO信息、查看涨跌排行榜以及通过WebSocket实时接收数据等步骤。 1. 获取市场列表 首先&#xff0c;您需要获取支持的市场列表&#xff0c;这有助于了解哪些市场可以交易或监控。 请求方法&#xff1a;GETURL&#xff1a…...

【C++深入系列】:模版详解(上)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 你不需要很厉害才能开始&#xff0c;但你需要开始才能很厉害。 ★★★ 本文前置知识&#xff1a; 类和对象&#xff08;上&#xff09; …...

leetcode刷题日记——同构字符串

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求判断 s 和 t 是否为同构字符串&#xff0c;即 s 中每个字符与 t 中对应位置的字符形成一个映射关系&#xff0c;且只能是一对一映射ASCII&#xff08;American Standard Code for Information Interchange&#xff09…...

HTTP/1.1 队头堵塞问题

文章目录 一、队头堵塞1、非管线化2、管线化 二、如何解决&#xff1f; 一、队头堵塞 1、非管线化 如图&#xff0c;http 请求必须等到上一个请求响应后才能发送&#xff0c;后面的以此类推&#xff0c;由此可以看出&#xff0c;在一个 tcp 通道中&#xff0c;如果某个 http 请…...

【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 仅针对urp管线 参考了YY老师这篇&#xff0c;可以先看他的再看这个可能更好理解一些&#xff1a;Unity Meta Quest MR 开发&#xff08;七&#xff09;&#xff1a;使…...

Qt界面卡住变慢的解决方法

本质原因: 当Qt界面出现卡顿或无响应时&#xff0c;通常是因为主线程&#xff08;GUI线程&#xff09;被耗时操作阻塞。 完全忘了。。。 Qt Creater解决方法 1. 定位耗时操作 目标&#xff1a;找到阻塞主线程的代码段。 方法&#xff1a; 使用QElapsedTimer测量代码执行时间…...

常用 Git 命令详解

Git 是一个强大的版本控制工具&#xff0c;广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令&#xff0c;并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…...

java导出word含表格并且带图片

背景 我们需要通过 Java 动态导出 Word 文档&#xff0c;基于预定义的 模板文件&#xff08;如 .docx 格式&#xff09;。模板中包含 表格&#xff0c;程序需要完成以下操作&#xff1a; 替换模板中的文本&#xff08;如占位符 ${设备类型} 等&#xff09;。 替换模板中的图…...

基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GEI步态能量提取 4.2 CNN卷积神经网络原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b/matlab2022a 3.部分核心程序 &…...