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:有人就会问,面向对象的特性…

C#——集合List

list list集合和Arraylist基本一样,只不过list是C#2.0版本新加入的范型类型。list也可以通过索引操作里面的元素,也有对list进行增删改查 概念 Array静态数组 * Arraylist 动态数组 * list集合 * 1. Array是容量是固定的,但是ArrayList和…

09-Spark架构

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

编程一般大学什么学院:揭秘计算机科学教育的多元归属

编程一般大学什么学院:揭秘计算机科学教育的多元归属 在探讨编程教育在大学中的归属时,我们往往会遇到一个问题:编程究竟属于哪个学院?这个问题的答案其实并不简单,因为编程作为计算机科学的核心内容,其教…

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

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

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

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

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

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

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

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

Java证件识别中的身份证识别接口

现如今,越来越多的互联网应用需要对身份证进行实名认证,但不知道大家有没有发现,从最初的手动录入身份证信息转变到了现在的图片上传自动识别呢?其实,这都是因为集成了身份证识别接口功能,今天,…

C语言队列操作及其安全问题

在C语言中,队列是一种常用的数据结构,特别适用于嵌入式开发中的任务调度、缓冲区管理等场景。下面是一个简单的循环队列的模板代码,它使用数组来实现队列,并提供了基本的入队(enqueue)和出队(de…

海康威视设备网络SDK_Win64 V6.1.9.4_build20220412 java本地demo实现预览视频下载、摄像头转向控制等

海康威视设备网络SDK_Win64 V6.1.9.4_build20220412 java本地demo实现预览视频下载、摄像头转向控制等

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…

MySQL向Es数据同步策略

哈喽&#xff0c;大家好&#xff01;目前有有一个小项目功能落到自己手中&#xff0c;也是一个面试必考点。如何保证MySQL与Es、Redis等之间的数据一致性&#xff0c;带着大家的问题&#xff0c;我给提供一种解决方案&#xff08;最终一致性&#xff09; 代码如下&#xff1a;…

Financial Statement Analysis with Large Language Models论文精读

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