Python内置debug库: pdb用法详解

文章目录

  • 0. 引言
  • 1. 基本用法
    • 1.1 设置断点
    • 1.2 通过命令行启动 `pdb`
  • 2. 常用命令
    • 2.1 `n` (next)
    • 2.2 `s` (step)
    • 2.3 `c` (continue)
    • 2.4 `l` (list)
    • 2.5 `p` (print)
    • 2.6 `h` (help)
    • 2.7 `b` (break)
    • 2.8 `cl` (clear)
    • 2.9 `q` (quit)
  • 3. 例子


0. 引言

pdb(Python Debugger)是Python的内置调试器,使用pdb进行调试可以帮助你深入了解程序的执行流程和变量状态,有助于快速定位和解决问题。通过上述常用命令和示例代码,你可以有效地在Python项目中使用pdb进行调试。

下面是pdb的一些常用功能和用法的详细介绍。

1. 基本用法

1.1 设置断点

要使用pdb调试Python代码,可以在需要调试的地方插入pdb.set_trace(),程序运行到这一行时会暂停,进入调试模式。

例子

import pdbdef add(a, b):return a + bdef main():x = 10y = 20pdb.set_trace()  # 设置断点result = add(x, y)print(f"Result: {result}")if __name__ == "__main__":main()

运行程序后,程序会在pdb.set_trace()处暂停,进入交互式调试模式。
在这里插入图片描述

1.2 通过命令行启动 pdb

可以直接从命令行启动pdb进行调试(此时不要求打断点):

python -m pdb your_script.py

此时会停留在代码第一行,然后你就可以依次 debug 所有的 python 代码。

2. 常用命令

2.1 n (next)

执行下一行代码,不会进入函数内部。

(Pdb) n

2.2 s (step)

进入当前行调用的函数。

(Pdb) s

2.3 c (continue)

继续执行程序,直到遇到下一个断点。

(Pdb) c

2.4 l (list)

显示当前代码行以及周围的代码。

(Pdb) l

2.5 p (print)

打印变量的值。

(Pdb) p x

2.6 h (help)

显示帮助信息。

(Pdb) h

2.7 b (break)

设置断点,可以在指定行或指定函数处设置断点。

(Pdb) b 12  # 在第12行设置断点
(Pdb) b add  # 在add函数处设置断点

2.8 cl (clear)

清除断点。

(Pdb) cl 1  # 清除编号为1的断点

2.9 q (quit)

退出调试器。

(Pdb) q

3. 例子

以下是一个完整的例子,展示了如何使用pdb进行调试:

import pdbdef add(a, b):return a + bdef multiply(a, b):return a * bdef main():x = 10y = 20pdb.set_trace()  # 设置断点sum_result = add(x, y)mul_result = multiply(x, y)print(f"Sum: {sum_result}")print(f"Product: {mul_result}")if __name__ == "__main__":main()

运行程序并调试:

  1. 运行程序: 直接运行上面的代码,程序会在pdb.set_trace() 的下一行处暂停。

  2. 查看代码: 使用l命令查看当前代码行和周围的代码。

(Pdb) l

在这里插入图片描述

  1. 打印变量值: 使用p命令打印变量的值。
(Pdb) p x
10
(Pdb) p y
20
  1. 单步执行: 使用n命令执行下一行代码。
(Pdb) n
> /xx/test_pdb.py(11)main()
-> print(f"Result: {result}")
  1. 继续执行: 使用c命令继续执行程序,直到遇到下一个断点或程序结束。

欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 Midjourney换脸,将一个人面部复制并粘贴到任意人身上

嘿,想不想将一个人的面部随意粘贴到任意人身上?现在开始教学如何使用 Discord 中的Midjourney Bot 实现,这就是“COPY A FACE”这个超酷的功能,它能帮你一键把脸贴到任何图片上。用到的是一个叫“InsightFace”的开源Discord机器人…

压缩列表(ziplist)

压缩列表(ziplist): ziplist是列表键和哈希键的底层实现之一 当一个列表键只包含少量列表项,并且每个列表项要么是小整数或者短字符串,那么redis会使用ziplist来做列表键的实现当一个哈希键只包含少量键值对&#xff0…

java入门1.4.0

前言: 在1.4.0版本中,更新了对语言三大要素的理解 红字为更新,绿字为迭代 这时我们目前拥有的知识 正片: 有了这些内容,我们就可以顺利进入到Spring Boot阶段了 Q:有人就会问,面向对象的特性…

09-Spark架构

相比MapReduce僵化的Map与Reduce分阶段计算,Spark计算框架更有弹性和灵活性,运行性能更佳。 1 Spark的计算阶段 MapReduce一个应用一次只运行一个map和一个reduceSpark可根据应用复杂度,分割成更多的计算阶段(stage)…

如何正确操作工业高温烤箱

高温烤箱广泛应用于陶瓷、丝印、汽车配件、电子、机电、通讯、化工、器材、印刷、制药、工业、橡胶、油漆、食品之烘烤、水份干燥、预热等用途。那么要想工业高温烤箱在使用的过程中能够正常运行,那么正确的操作是必不可少的, 1、防止触电:高…

教你一招,一键学会NAS磁盘“净身出户”的好方法!

在毕业季这个充满离别与新的开始的时刻,空气中似乎也弥漫着一种“断舍离”的氛围。就在这个特殊的季节里,我们迎来了618购物节,各种诱人的优惠活动如雨后春笋般涌现。铁威马618优惠不断!T系列部分低至六折! 在这个热闹…

超级会员卡积分收银小程序源码系统,在线充值+商家核销+在线下单 附带源代码+搭建部署教程

系统概述 在当今数字化快速发展的时代,移动支付已经成为人们生活中不可或缺的一部分。为了满足商家和消费者对于便捷、高效支付体验的需求,超级会员卡积分收银小程序源码系统应运而生。本文将深入介绍该源码系统的开发背景及其特色功能,附带…

录制视频软件哪个好?录制视频,4款好软件推荐

随着网络技术的飞速发展和社交媒体的普及,录制视频已经成为人们记录生活、分享知识和展示才华的重要方式。在众多录制视频软件中,如何挑选一款功能强大、操作简便的工具,成为了许多用户的难题。本文将为您推荐4款优秀的录制视频软件&#xff…

SpringMVC系列九: 数据格式化与验证及国际化

SpringMVC 数据格式化基本介绍基本数据类型和字符串自动转换应用实例-页面演示方式Postman完成测试 特殊数据类型和字符串自动转换应用实例-页面演示方式Postman完成测试 验证及国际化概述应用实例代码实现注意事项和使用细节 注解的结合使用先看一个问题解决问题 数据类型转换…

LearnOpenGL 及 ShaderToy 的 CMake 构建框架

文章目录 构建目标具体框架根目录src 目录app 目录import.cmake其他 CMake 函数 使用框架实际效果摄像机坐标变换使用 assimp 库加载模型shadertoy 测试 framebuffer 离屏渲染 其他 为了复习 OpenGL(主要是看到 shadertoy 上有好玩的着色器),…

C#开发-集合使用和技巧(六)特殊转换方法SelectMany的介绍和用法

介绍 SelectMany 方法在C#中用于将集合中的元素转换为其他类型的集合&#xff0c;并将这些集合扁平化为一个单一的序列。它是LINQ的一部分&#xff0c;允许你在一个序列上进行投影和过滤操作&#xff0c;然后将结果合并成一个序列。 方法定义 public static IEnumerable<…

城市行人感知新方法:基于音频的行人检测与预测

智慧城市的重要组成部分之一是部署传感器技术来监控和控制城市的各种服务和功能。城市使用各种传感器来评估城市服务的提供和获取方式&#xff0c;这有助于缓解瓶颈问题&#xff0c;并提前预警潜在的服务中断。了解城市服务需求的时间和空间变化有助于更好的资源利用、更公平的…

ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在

问题出现 原因分析 在程序相应的目录上面&#xff0c;没有找到对应的配置文件&#xff0c;但是这个文件不是我们自己生成的&#xff0c;而是通过 ionic 编译之后生成。 处理方案 先执行 ionic build&#xff0c;将 ionic 项目打包出来然后执行 npx cap sync 再使用 Android…

Financial Statement Analysis with Large Language Models论文精读

Financial Statement Analysis with Large Language Models 论文精读 文章目录 Financial Statement Analysis with Large Language Models 论文精读Abstract 核心速览研究细节baselineGPT与分析师对比人类分析师与 GPT 的互补性错误预测的来源增量信息增益 分析师出现偏差或分…

【YOLOv10改进[注意力]】在YOLOv10中使用注意力MLCA的实践+ 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将进行在YOLOv10中添加注意力MLCA的实践,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 MLCA 二 在YOLOv10中使用注意力MLCA的实践 1 整体修改

【CS.AL】算法核心之分治算法:从入门到进阶

文章目录 1. 概述2. 适用场景3. 设计步骤4. 优缺点5. 典型应用6. 题目和代码示例6.1 简单题目&#xff1a;归并排序6.2 中等题目&#xff1a;最近点对问题6.3 困难题目&#xff1a;分数背包问题 7. 题目和思路表格8. 总结References 1000.01.CS.AL.1.4-核心-DivedeToConquerAlg…

Python兴趣编程百例:手把手带你开发一个图片转字符图的小工具

在数字世界的无尽探索中&#xff0c;我们时常被那些看似平凡的技术所启发&#xff0c;它们如同星辰般点缀着我们的创意天空。今天&#xff0c;我突发奇想&#xff0c;想要用Python开发一个将图片转化为字符画的小工具。这不仅是一次技术的实践&#xff0c;更是一场艺术与科技的…

多客陪玩系统源码支持二次开发陪玩预约系统搭建,打造专业游戏陪玩平台

简述 随着电竞行业的快速发展&#xff0c;电竞陪玩APP正在逐渐成为用户在休闲娱乐时的首选。为了吸引用户和提高用户体验&#xff0c;电竞陪玩APP开发需要定制一些特色功能&#xff0c;并通过合适的盈利模式来获得收益。本文将为您介绍电竞陪玩APP开发需要定制的特色功能以及常…

LiveCharts2:简单灵活交互式且功能强大的.NET图表库

前言 之前的文章中提到过ScottPlot、与oxyplot&#xff0c;这两个是比较常用的.NET图表库&#xff0c;今天介绍一款新的.NET图表库&#xff1a;LiveCharts2。 LiveCharts2介绍 LiveCharts2 是一个现代化的数据可视化库&#xff0c;用于创建动态和交互式图表&#xff0c;支持…

一小时搞定JavaScript(2)——DOM与BOM的应用

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!! 本篇文章会与java进行对比学习,因为JS中很多语法和java是相同的,所以大家最好熟悉Java语言后再来进行学习,效果更佳,见效更快. 文章目录 5.DOM和BOM5.1 DOM5.1.1传统元素获取5.1.2 C…