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

news/2024/10/7 20:54:51/

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

历史攻略:

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

adb:安卓手机USB调试模式

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

一、pdb 的基本特性:

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

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

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

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

二、基本用法

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

2.2 常用命令:

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

三、示例代码:

python"># -*- 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 * widthreturn areadef main_area():pdb.set_trace()  # 断点,程序将在此暂停length = 5width = 10area = 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 * ydef add(x, y):return x + ydef calculate(length, width):return multiply(length, width), add(length, width)def main_calculate():length = 5width = 10pdb.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.ppmy.cn/news/1535855.html

相关文章

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频&#xff1a;https://www.bilibili.com/video/BV1cU411S7iV/ 课程文档&#xff1a; https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/Prompt 关…

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

目录 目录 MATLAB 与 R 的优势比较 在建模中的互补性 数据预处理中的合作 1. 数据导入与清洗&#xff08;R语言&#xff09; 2. 数据格式转换与传递&#xff08;MATLAB&#xff09; 特征工程的协同使用 1. 特征生成&#xff08;MATLAB&#xff09; 2. 特征选择&#xf…

helm 测试安装redis

helm search repo redis # 搜索redis的chart helm show readme bitnami/redis # 展示安装相关文档&#xff08;readme文件&#xff09; 拉取指定版本的安装包&#xff08;chart&#xff09; helm pull bitnami/redis --version 17.4.3 解压安装包 tar -xf redis-17.4.3.tgz …

[C语言]指针和数组

目录 1.数组的地址 2.通过指针访问数组 3.数组和指针的不同点 4.指针数组 1.数组的地址 数组的地址是什么&#xff1f; 看下面一组代码 #include <stdio.h> int main() { int arr[5] {5,4,3,2,1}; printf("&arr[0] %p\n", &arr[0]); printf(&qu…

OpenCV视频I/O(13)视频采集类VideoCapture之等待多个视频流中的任意一个变为可用状态函数waitAny()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 等待来自 VideoCapture 的可用帧。 cv::VideoCapture::waitAny 是一个静态成员函数&#xff0c;用于等待多个视频流中的任意一个变为可用状态。这…

OpenGL笔记十九之相机系统

OpenGL笔记十九之相机系统 —— 2024-10-02 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十九之相机系统1.运行1.1.游戏相机1.2.轨迹球相机 2.游戏相机与轨迹球相机切换3.博主笔记本要运行需要更改的文件更改1:28_OpenGL_CameraSystem/applicat…

设计模式-生成器模式/建造者模式Builder

构建起模式&#xff1a;将一个复杂类的表示与其构造分离&#xff0c;使得相同的构建过程能够得出不同的表示。&#xff08;建造者其实和工厂模式差不多&#xff09; 详细的UML类图 图文说明&#xff1a;距离相同的构建过程 得出不同的展示。此时就用两个类&#xff08;文本生成…

C++之模版进阶篇

目录 前言 1.非类型模版参数 2.模版的特化 2.1概念 2.2函数模版特化 2.3 类模板特化 2.3.1 全特化和偏特化 2.3.2类模版特化应用实例 3.模版分离编译 3.1 什么是分离编译 3.2 模板的分离编译 3.3 解决方法 4. 模板总结 结束语 前言 在模版初阶我们学习了函数模版和类…