Python运行态 - 代码调试:掌握pdb

news2024/12/26 15:59:02

简介:pdb(Python Debugger)是 Python 标准库中的调试工具,旨在帮助开发者在代码中设置断点、检查变量值和逐行执行代码。这对于定位和修复程序中的问题至关重要。pdb 是 Python 的内置模块,因此不需要额外安装。

历史攻略:

安卓手机浏览器:远程调试

adb:安卓手机USB调试模式

Pycharm:ssh远程代码调试和开发

一、pdb 的基本特性:

  1. 断点设置:通过 set_trace() 方法设置程序运行的暂停点。

  2. 变量检查:可以在任意时刻查看和修改当前作用域内的变量。

  3. 单步执行:逐行执行代码,允许开发者观察程序的状态变化。

  4. 调用栈查看:查看当前函数调用的栈,了解程序的执行路径。

二、基本用法

2.1 设置断点:使用 pdb.set_trace() 来设置一个断点。当代码执行到此行时会暂停,允许开发者进行调试。

2.2 常用命令:

n(next):执行下一行。
c(continue):继续执行,直到下一个断点。
q(quit):退出调试器。
p <variable>:打印变量的值。
l(list):查看当前执行行的代码上下文。
h(help):获取帮助,查看可用命令。

三、示例代码:

# -*- coding: utf-8 -*-
# time: 2024/10/01 18:48
# file: pdb_demo.py
# author: tom
# 微信公众号: 玩转测试开发
import pdb


# 示例 1:简单断点
def calculate_area(length, width):
    area = length * width
    return area


def main_area():
    pdb.set_trace()  # 断点,程序将在此暂停
    length = 5
    width = 10
    area = calculate_area(length, width)
    print("Area:", area)


# 示例 2:循环中的断点
def loop_example():
    for i in range(5):
        pdb.set_trace()  # 在循环内设置断点
        print("Current index:", i)


# 示例 3:检查调用栈
def multiply(x, y):
    return x * y


def add(x, y):
    return x + y


def calculate(length, width):
    return multiply(length, width), add(length, width)


def main_calculate():
    length = 5
    width = 10
    pdb.set_trace()  # 在函数调用前设置断点
    result = calculate(length, width)
    print("Result:", result)


# 示例 4:条件断点
def condition_example():
    for i in range(10):
        if i == 5:
            pdb.set_trace()  # 当 i 为 5 时暂停
        print(i)


if __name__ == "__main__":
    main_area()
    print("---")
    loop_example()
    print("---")
    main_calculate()
    print("---")
    condition_example()

四、运行结果参考:

图片

五、说明解析

示例1 - 简单断点:该示例展示了如何在函数 main_area 中使用 pdb.set_trace() 设置一个断点。当程序执行到该行时会暂停,允许开发者查看 length 和 width 的值,并逐步执行到计算面积的步骤。

示例 2 - 循环中的断点:在这个示例中,每次进入循环时都会暂停,开发者可以查看当前的循环索引 i。这有助于理解循环的行为并调试相关问题。

示例 3 - 检查调用栈:在 main_calculate 函数中设置断点,便于开发者在调用 calculate 函数之前查看变量的状态。输入 l 可以查看当前代码上下文,输入 p result 可以检查函数返回的结果。

示例 4 - 条件断点:这个示例演示了如何在循环中通过简单的条件逻辑实现“条件断点”。当索引 i 达到 5 时,程序将暂停,开发者可以进行调试。

六、小结:pdb 是调试 Python 程序的强大工具,通过灵活设置断点、单步执行和检查变量,开发者能够深入理解代码的执行流程,快速定位并修复问题。在使用 pdb 时,掌握基本命令和调试技巧,将显著提高调试效率和代码质量。

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

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

相关文章

20款奔驰CLS300升级原厂抬头显示HUD 23P智能辅助驾驶 触摸屏人机交互系统

以下是为您生成的一份关于 18 款奔驰 CLS 老款改新款的改装文案&#xff1a; 18 款奔驰 CLS 老款改新款&#xff1a;科技升级&#xff0c;畅享极致驾驶体验 在汽车改装的世界里&#xff0c;每一次的升级都是对卓越的追求。今天&#xff0c;让我们一同探索 18 款奔驰 CLS 老款改…

Leetcode—152. 乘积最大子数组【中等】

2024每日刷题&#xff08;174&#xff09; Leetcode—152. 乘积最大子数组 C实现代码 class Solution { public:int maxProduct(vector<int>& nums) {int n nums.size();int mx nums[0];int mn nums[0];int ans mx;for(int i 1; i < n; i) {const int prem…

贪心算法c++

贪心算法C概述 一、贪心算法的基本概念 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;又名贪婪法&#xff0c;是一种解决优化问题的常用算法。其基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决…

基于yolov8的200鸟类智能检测与识别系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的200种鸟类智能检测与识别系统是一款基于深度学习的目标检测系统&#xff0c;该系统利用YOLOv8框架&#xff0c;通过11788张图片训练出一个能够进行鸟类智能检测与识别的模型&#xff0c;可以识别200种不同的鸟类。 该系统采用Python与PyQt5开发&…

苹果电脑磁盘满了怎么清理内存?必看清理秘籍

对于很多Mac用户来说&#xff0c;随着时间的推移&#xff0c;电脑逐渐变慢并出现磁盘空间不足的提示是一件非常头疼的事情。正确理解内存和存储的区别&#xff0c;并采用有效的清理方法&#xff0c;对于保持Mac性能至关重要。本文将深入探讨如何有效清理Mac上的磁盘空间&#x…

一文看懂计算机中的大小端(Endianess)

文章目录 前言一、什么是大小端二、如何判断大小端三、大小端的转换3.1 使用标准库函数3.2 手动实现大小端转换 前言 本文主要探讨计算机中大小端的相关概念以及如何进行大小端的判断和转换等。 一、什么是大小端 大小端&#xff08;Endianess&#xff09;是指计算机系统在存…

CentOS7安装宝塔

第一步&#xff1a;安装 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh安装成功后会弹出这个页面 那么下次怎样再次打开这个页面呢&#xff1f; 输入这个&#xff1a; /etc/init.d/bt default…

YOLO v1详解解读

&#x1f680; 在此之前主要介绍了YOLO v5源码的安装和使用&#xff08;YOLO v5安装教程&#xff09;&#xff0c;接下来将探索YOLO的实现原理&#xff0c;作为一个金典的单阶段目标检测算法&#xff0c;应该深度的理解它的构建思想&#xff1b;所以本系列文章将从LOVO v1出发到…

JavaEE: 深入解析HTTP协议的奥秘(1)

文章目录 HTTPHTTP 是什么HTTP 协议抓包fiddle 用法 HTTP 请求响应基本格式 HTTP HTTP 是什么 HTTP 全称为"超文本传输协议". HTTP不仅仅能传输文本,还能传输图片,传输音频文件,传输其他的各种数据. 因此它广泛应用在日常开发的各种场景中. HTTP 往往是基于传输层的…

PCIe配置篇(0)——地址空间

一、地址空间回顾 在最开始&#xff0c;我们先来回顾一下PCIe的一些基本概念&#xff0c;首先&#xff0c;PCIe是PCI的延伸&#xff0c;全名叫 Peripheral Component Interface Express。从名字就能看出&#xff0c;这是一种外设总线协议。在整个系统中&#xff0c;外设只是其中…

算法与程序课程设计——观光铁路

观光铁路 一、任务 跳蚤国正在大力发展旅游业&#xff0c;每个城市都被打造成了旅游景点。 许多跳蚤想去其他城市旅游&#xff0c;但是由于跳得比较慢&#xff0c;它们的愿望难以实现。这时&#xff0c;小C听说有一种叫做火车的交通工具&#xff0c;在铁路上跑得很快&#x…

C语言基础(10)之指针(2)

在上一篇文章中我们谈到了指针&#xff0c;并给老铁们讲解了什么是指针、指针类型、野指针以及指针运算等知识。在这篇文章中小编将继续带大家了解指针的相关知识点。 1. 指针和数组 指针和数组之间又能有什么联系呢&#xff1f;在谈这个之前&#xff0c;我们先来讲讲指针和数…

深入分析——为什么未初始化的全局变量是零?

1、前言 #include <stdio.h>int temp;int main(void) {//打印temp的值是零printf("temp%d\n", temp);return 0; }在C语言编程中&#xff0c;我们默认未初始化的全局变量、静态局部变量的初始化值都是零&#xff0c;底层原理如下 未初始化的全局变量、静态局部…

揭秘AI写作工具:如何改变内容创作新格局

小伙伴们&#xff0c;今儿咱们来聊聊那些个让人眼前一亮、脑洞大开的AI写作神器——笔灵AI写作、宙语AI写作、博思白板AI写作&#xff0c;还有讯飞星火&#xff0c;它们啊&#xff0c;简直就是文案人儿的超级辅助&#xff0c;让咱们写东西的时候&#xff0c;灵感嗖嗖地往外冒&a…

TinyOS -数据发布实验

文章目录 简介分析 简介 分发协议主要用于维护网络共享配置的一致性&#xff0c;这里的共享配置可以是节点传感器采样的周期、节点LPL醒睡的周期或者节点运行程序的映像等。每个节点都会维护一份这样的配置&#xff0c;分发协议负责通知每个节点这些配置的改变&#xff0c;并通…

国产分布式数据库开启新篇章!详解安全可靠测评结果公告(2024年第2号)

重磅消息&#xff01;2024年的安全可靠测评结果&#xff08;数据库篇&#xff09;终于揭晓了&#xff01;&#x1f680; 9月30日&#xff0c;国庆前夕&#xff0c;中国信息安全测评中心和国家保密科技测评中心联合发布了今年第二号测评结果&#xff0c;这份名单有效期三年&…

大数据新视界 --大数据大厂之大数据驱动智能客服 -- 提升客户体验的核心动力

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

MATLAB与R语言在建模中的合作与应用(下篇)

目录 目录 模型训练的协同使用 1. 使用 R 语言进行统计建模 2. 使用 MATLAB 进行机器学习建模 模型评估与调优 1. 在 R 中评估模型性能 2. 在 MATLAB 中进行模型优化 实战示例&#xff1a;MATLAB 与 R 的协同建模 总结 在上篇文章中&#xff0c;我们介绍了 MATLAB 和 R…

打工人狂喜,轻松定时发圈

自动定时发圈软件有哪些优势&#xff1f; 1、不用下载安装软件 2、不需要绑定手机或电脑 3、不对电脑或手机做限制 4、不越狱不刷机 5、能更新迭代 6、有售后服务 7、使用安全登录&#xff0c;保障账号安全的 8、不用去做独立部署&#xff08;可以选择&#xff09; 9、…

class 032 位图

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. 左程云的个人空间-左程云个人主页-哔哩哔哩视频…