Python初级到高级调试

2023-10-27

这篇博客通过示例介绍调试的一些基本和常见用法:

  • 可以使用调试的错误类型
  • 常见的调试技术,如打印表达式
  • 探索python调试器模块(pdb)
  • 调试模式期间使用的命令
  • 修改代码执行之间的值
  • 显示表达式
  • 在代码执行的不同点显示值

更偏向打印语句,而不是像PDB这样的单行调试器,但可视化调试器要好得多(可以看到发生了什么变化,再加上得到了增强的导航等)。当没有调试器时,首选方法是添加日志记录。Python具有广泛的日志记录功能,文档非常棒。

什么是Python调试?

开发人员经常会发现自己编写的代码工作不太正常。当这种情况发生时,开发人员通过 检测、执行和检查代码 来调试他们的代码,以确定为何应用程序的状态与代码没有按预期正确运行。

通常,调试是识别和修复软件代码、硬件或任何其他系统中的错误或缺陷的过程。它包括检查程序的行为,并确定发生任何错误或意外行为的根本原因。

调试的目标是识别和解决阻止软件或系统正常运行的问题。 这包括分析代码、检查变量和数据结构,以及测试不同的场景以确定错误的原因。一旦确定了问题的根本原因,开发人员就可以对代码进行更改以解决问题。

为什么调试很重要?

每一个中等大小或更大的应用程序都存在缺陷。每个开发人员都必须学习如何调试代码,以便编写在时间和预算允许的情况下正常工作的程序。

除了修复bug之外,调试也是通过优化性能和改进逻辑来提高应用程序效率的一项重要技能。调试是一项复杂的技能,开发人员需要时间和实践才能获得这种能力。

调试是软件开发人员的一项基本技能,因为它有助于确保软件正常运行并没有缺陷。调试可能是一个耗时的过程,但它对于确保软件的质量和可靠性至关重要。

调试工具和策略有助于更快地解决问题并提高开发人员的生产力。结果,软件质量和最终用户体验都得到了改善。

如何在python中执行调试?

有许多工具和技术可用于调试,包括集成到开发环境中的调试工具、命令行工具、日志记录和各种测试框架。有效的调试需要仔细注意细节、耐心和系统解决问题的方法。

调试过程是如何工作的?

调试过程通常需要以下步骤:

Error identification
Error analysis
Fix and validation

  • 错误识别
  • 误差分析
  • 修复和验证
  • 调试与测试

需要调试的编码错误是什么?

软件缺陷是由于软件开发固有的复杂性而产生的。在软件上线后,也会观察到轻微的生产错误,因为客户以意想不到的方式使用它。下面我们给出一些通常需要调试过程的常见错误类型。

  1. 语法错误
  2. 语义错误
  3. 逻辑错误
  4. 运行时错误

常见的调试技术有哪些?

可以使用几种策略来最小化错误并减少调试所需的时间。

  1. 打印值
    在应用程序执行期间的特定时间打印或显示变量和状态的值。

  2. 逐行执行代码
    在程序执行过程中,它将一行一行地单步执行每个代码。通过这种技术跟踪执行过程中变量变化的状态。

  3. 更改程序的路径
    更改程序的状态以使其执行不同的操作。

  4. 添加断点
    可以任意停止执行代码以访问或操纵状态的代码行。

  5. 添加跟踪点
    跟踪点是带有与之关联的自定义操作的断点。trace命令定义跟踪点,即目标程序中调试器将短暂停止、收集一些数据,然后允许程序继续运行的点。

  6. 添加观察点
    在某些事件时停止程序。为此用关系运算符给出一些变量值和变量值。当满足此条件时,系统将自动停止。

  7. 分析输出
    在调试器窗口中查看程序的输出

  8. 日志ing
    研究日志文件以查找并解决错误。

什么是Python调试器(Python模块)?

Python调试器是Python程序员的交互式源代码调试器。它可以在源代码行级别设置条件断点和单步执行。它还支持检查堆栈框架、源代码列表,以及在任何堆栈框架的上下文中对任意Python代码进行评估。

command line interface (CLI)

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python初级到高级调试 的相关文章

  • Urllib 的 urlopen 在某些网站上被破坏(例如 StackApps api):返回垃圾结果

    我在用着urllib2 s urlopen函数尝试从 StackOverflow api 获取 JSON 结果 我正在使用的代码 gt gt gt import urllib2 gt gt gt conn urllib2 urlopen h
  • Heroku 上的 Django 应用程序在一段时间后删除对象

    我编写了一个简单的 Django 问答论坛应用程序并将其部署在 Heroku 上 该网站的本地版本运行良好 但是 生产版本不会将问题 答案等存储超过几个小时 我决定坚持使用 Django 附带的 sqlite3 我预计该网站不会有太多流量
  • 如何更改 Python 函数的表示形式?

    gt gt gt def hehe return spam gt gt gt repr hehe
  • Chrome控制台网络中的“发起者其他”是什么?

    当有人在我们的网站上进行转化以进行报告和分析时 我会触发图像标签 img src https example evyy net conv somechannel cats cid 3790 oid 123 cat1 premium sku1
  • 为什么 Numpy 创建零数组比用零替换现有数组的值要快得多?

    我有一个用于跟踪各种值的数组 数组是2500x1700尺寸上 所以不是很大 在会话结束时 我需要将该数组中的所有值重置为零 我尝试创建一个新的零数组并将数组中的所有值替换为零 并且创建一个全新的数组要快得多 代码示例 for in sess
  • Python:当为变量分配新内容时,“旧”内存是否被释放?

    如果为变量分配了任何新内容 为 旧内容 分配的内存是否会 正确 释放 例如 在以下脚本中 在为 a 分配一些新内容后 变量 a 作为零数组的内存是否会被释放 import numpy a numpy zeros 1000 a a 1 我想象
  • 在 Tkinter 中调整另一个小部件内的一个小部件的大小

    我正在开发穆斯堡尔光谱 化学 的模拟软件 但在设计 UI 时 我在使用父窗口小部件调整子窗口小部件的大小时遇到 了问题 当窗口最大化时 父框架会填充额外的空间 但子窗口小部件不会更改其大小 from Tkinter import impor
  • 更改散景图中选项卡的样式

    我想知道是否有办法更改散景图上生成的选项卡的属性 诸如增加文本字体 更改制表符宽度等更改 以下是用于生成具有两个选项卡的绘图的简单代码 from bokeh models widgets import Panel Tabs from bok
  • 在 Windows 上安装 PyGIMP

    在网上 我可以找到有关使用 python 编写 gimp 脚本的各种示例 http www jamesh id au software pygimp http www jamesh id au software pygimp http ww
  • sqlalchemy,使用反向包含(不在)子列值列表中进行选择

    我在flask sqlalchemy 中有一个典型的帖子 标签 与一篇帖子相关的许多标签 关系 并且我想选择我提供的列表中未标记任何标签的帖子 首先 我建立的模型 class Post db Model id db Column db In
  • matplotlib 中矩形面片之间存在不需要的空间

    以下代码绘制两个红色矩形 红色矩形应该彼此相邻 之间没有空间 在 python 图中 这是可以的 在导出的 pdf 中 矩形之间有一个细长但明显的空白 有什么方法可以解决这个问题吗 import matplotlib pyplot as p
  • 如何更改Python中的全局变量[重复]

    这个问题在这里已经有答案了 我正在尝试更改程序中的变量 我在程序开始时声明了一个全局变量 我想在程序中的不同函数中更改该变量 我可以通过再次声明函数内的变量来做到这一点 但我想知道是否有更好的方法来做到这一点 下面是一些测试代码来解释我的意
  • 无法从 celery 信号连接到 celery 任务?

    我正在尝试连接task2 from task success signal from celery signals import task success from celery import Celery app Celery app t
  • 在IPython笔记本中自动播放声音

    我经常在 IPython 笔记本中运行长时间运行的单元 我希望笔记本在单元完成执行时自动发出蜂鸣声或播放声音 有没有办法在 iPython 笔记本中执行此操作 或者我可以在单元格末尾放置一些命令来自动播放声音 我正在使用 Chrome 如果
  • 计算列表中的子列表

    L 2 4 5 6 2 1 6 6 3 2 4 5 3 4 5 我想知道任意子序列出现了多少次 s 2 4 5 例如会返回2次 I tried L count s 但它不起作用 因为我认为它期望寻找类似的东西 random numbers
  • WTforms 表单未提交但不输出验证错误

    我正在尝试使用以下方式上传文件flask uploads工作和遇到一些障碍 我会告诉你我的flask查看函数 html 希望有人能指出我缺少的内容 基本上发生的情况是我提交了表格但失败了if request method POST and
  • 使用 Python PuLP 混合整数规划的时间限制

    我一直在使用PuLP http pythonhosted org PuLP 解决我感兴趣的特定混合整数线性规划 MIP 但是 随着问题规模的增长 PuLP 花费的时间太长 我希望能够运行求解器一段时间 并在需要很长时间的情况下提前终止它 并
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这
  • Pepper Robot:如何将 Python 地标检测移植到 Choregraphe?

    我正在尝试编写一个小程序 让 Pepper 通过 Choregraphe 检查房间内的地标 用于地标检测的常规 Python 代码工作得很好 但我无法将其移植到 Choregraphe http doc aldebaran com 2 5
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的

随机推荐

  • Spring自动装配(本人自己理解)

    1 要想实现自动装配 必须要有自动装配的支持 xmlns context http www springframework org schema context http www springframework org schema con
  • 判断object是list或者string_Java基础之String漫谈(三)

    文章目录 1 导读 2 JVM内存模型的简介 3 String intern 4 String intern的利弊 1 导读 这期主要分享下String的常量池以及intern方法的使用 2 JVM内存模型的简介 在介绍String的常量池
  • DPD(Digital Pre-Distortion,数字预失真)

    什么是DPD 下图中图A是一个理想PA的输入输出关系 它具有线性特性 也就是说输出信号的功率与输入信号功率具有线性关系 但是 现实中使用的PA却不具备理想PA的线性特性 如图C所示 现实PA的输出与输入是非线性关系 为了让非理想PA也能有近
  • ctfshow web系列

    ctfshow web系列 1 web5 MD5绕过 参考文章 源代码
  • [Utility] +[AFAggregator logDictationFailedWithError:] Error Domain=kAFAssistantErrorDomain Code=7 “

    语音识别在识别多次之后报错 不能继续工作 语音识别报错 Utility AFAggregator logDictationFailedWithError Error Domain kAFAssistantErrorDomain Code 7
  • 第46篇-网易易盾滑块请求参数分析【2022-11-16】

    声明 该专栏涉及的所有案例均为学习使用 严禁用于商业用途和非法用途 否则由此产生的一切后果均与作者无关 如有侵权 请私信联系本人删帖 文章目录 一 前言 二 流程分析 三 data参数 1 d值 2 p值 3 ext值 四 cb参数 五 c
  • 四种常见的登录方案

    1 Cookie Session 登录 HTTP 是一种无状态的协议 客户端每次发送请求时 首先要和服务器端建立一个连接 在请求完成后又会断开这个连接 这种方式可以节省传输时占用的连接资源 但同时也存在一个问题 每次请求都是独立的 服务器端
  • Mysql高可用高性能存储应用系列4 - 分库分表、中间件

    概述 为什么要分库的原因 1 很多时候接口性能慢都是数据库造成的 2 并发量比较大时 大量的数据库请求 会带来磁盘I O的性能瓶颈 3 来越多 导致sql查询数据 即使走了索引也比较慢 分库分表的场景 分库和分表是不同的两个概念 解决的问题
  • mac os操作系统如何降级

    降级方法 哔哩哔哩视频有相关讲解方法 一种是U盘启动方法 去app store下载相应版本操作系统 速度快 或者百度云 速度慢 做U盘启动盘 重启 键盘按住option键 抹掉硬盘数据 然后执行安装系统 过半个小时以上 完成安装 还有一种是
  • Linux jq 命令讲解与实战操作(json字符串解析工具)

    文章目录 一 概述 二 jq 命令安装 三 jq 命令语法与示例详解 1 基本用法 2 常用选项 3 查询和过滤 1 选择字段 2 过滤 3 遍历数组 4 组合操作 4 修改和创建 1 修改字段值 2 创建新字段 3 组合操作 4 条件修改
  • redis设计与实现读书笔记-数据结构

    简单动态字符串 数据结构 SDS与C字符串的区别 C语言使用长度为N 1的字符数组来表示长度为N的字符串 并且字符数组的最后一个元素总是空字符 0 C字符串并不记录自身的长度信息 所以为了获取一个C字符串的长度 程序必须遍历整个字符串 和C
  • write(byte b[], int off, int len)与write(byte b[])

    在进行写文件的时候有时候返现 通过write byte b 方式写文件比原来的文件大一些 流程代码 public static void main String args throws Exception long t1 System cu
  • 安防摄像头已分别接入乐橙云、萤石云,如何实现私有云平台的统一管理与向上级联?

    一 背景分析 科技创新对社会发展的重要性不言而喻 对于安防行业来说 人工智能和5G等新技术的应用 已经成为推动智能安防发展的一块关键踏板 从技术维度来看 人工智能 云计算 大数据 物联网等技术在安防视频监控领域产生了较多的交汇与融合 新技术
  • 冲刺必会代码100题(1-31)

    说在前面 链表章节 22题之前 多处用到了二级指针 有些地方可以选择使用一级指针也可 题目目录 1 顺序表01 2023 08 19 1 题目描述 2 算法思想 3 代码示例 4 总结 2 顺序表02 2023 08 19 1 题目描述 2
  • matlab如何输入数值,如何将数据输入到训练的神经网络算法 - MATLAB

    这是很基本的 但我似乎无法在网上找到答案 如何将数据输入到训练的神经网络算法 MATLAB 我已经开发了使用MATLAB进行分类的神经网络 但是 我想以预期的方式向训练算法提供用于预测的新数据集 我似乎无法弄清函数myNeuralNetwo
  • protected 权限方法调用.

    在同一个包中 子类可以调用父类的protected方法 子类的对象也可以调用父类的protected 方法 在不同的包中 在子类的内部可以调用父类 超类的protected 方法 但是子类的对象无法调用父类 超类的protected方法
  • MD5 算法流程

    先通过下面的命令对 md5算法有个感性的认识 md5sum tmp 1 txt 1dc792fcaf345a07b10248a387cc2718 tmp 1 txt md5sum 从键盘输入 ctrl d 结束输入 hello world
  • Unity 运行时到处fbx-Autodesk FBX SDK for Unity

    参考链接
  • VMware 虚拟机快照、克隆、磁盘扩容

    1 快照 快照是虚拟机某个时间点上完整系统的镜像 可以在虚拟机内部通过快照文件恢复系统到之前的节点 拍摄快照 恢复快照 2 克隆 克隆是原始虚拟机全部状态的一个拷贝 是脱离原始虚拟机独立存在的 可以在宿主机或其他机器上通过克隆文件创建一个完
  • Python初级到高级调试

    Python初级到高级调试 什么是Python调试 为什么调试很重要 如何在python中执行调试 需要调试的编码错误是什么 常见的调试技术有哪些 什么是Python调试器 Python模块 参考 这篇博客通过示例介绍调试的一些基本和常见用