Python 中更轻松调试的技巧

即使您编写了干净、高效、可读的代码,并且单元测试用例对代码进行了良好的覆盖,也不可能编写一次并始终完美运行。在大多数情况下,错误是不可避免的,调试是开发人员日常生活的一部分。因此,学习调试技巧将提高您和您的代码的性能和效率。这篇文章向您介绍了一些在 Python 中更容易调试的技巧和工具。

策略 

有效调试的第一步也是最重要的一步是识别实际错误。获得错误详细信息后,我们需要找到错误位置,分析错误的情况和问题的根本原因并解决它。您需要拥有正确的策略和正确的工具。 

调试有几种策略。一是前向分析,二是后向分析。

正向分析方法是在调试器模式下重新运行代码,在可疑行设置断点并进行调试。要进行正向分析,可以使用 pdb 和 IDE 进行高效调试。

逆向分析方法是利用错误发生时从生产环境收集的日志来追踪问题。为了进行向后分析,可以使用打印功能、记录器、快照等工具。

可以使用 Lightrun Cloud 等工具实现后向和前向分析的组合以进行实时调试,我们将在本文后面讨论。 

使用此类工具,开发人员可以在任何类型的应用程序(单体和遗留应用程序、微服务和分布式系统)中执行实时调试。与 APM 和其他 DevOps 工具集成,开发人员可以访问快照、日志和性能指标,以识别错误并有效解决问题。

使用 Python 调试器 (pdb) 进行正向分析

如果你让程序以单步模式运行,你可以随时检查运行代码的状态。pdb是Python的内置调试器工具还有一些其他工具,例如 web-pdb,但在大多数情况下,pdb 就足够有用了。

要在 pdb 中运行该程序,请运行以下命令:

python -m pdbaddition.py

程序将开始运行第一步。如果要跳过并运行完整代码,请按 1。要执行下一行,请按 n。这将帮助您理解变量值和执行流程。

如果您的代码很大并且想要设置断点,请使用 set_trace 方法: 

使用 IDE 调试器进行正向分析

大多数IDE都有很多功能,比如设置断点、单步执行、单步执行、继续等。这些命令可以帮助开发人员高效调试。当前可用于 Python 的一些优秀 IDE 包括: 

PyCharm:JetBrains 的 PyCharm IDE 具有集成的调试器和测试运行器以及大量开箱即用的工具。

Visual Studio Code:Visual Studio Code 支持带有 Microsoft Python 扩展的 Python。 

如果您使用 Windows 10 或 11 并为 Linux 系统构建应用程序,WSL是进行开发和测试的好方法。Visual Studio 与远程 WSL 扩展和 Python 扩展相结合,使开发人员能够在 WSL 中运行时进行编辑和远程调试。

在少数情况下,不可能重现类似的场景。在这种情况下,向后分析可以帮助开发人员识别并解决问题。 

使用打印/断言功能进行向后分析 

最简单但功能强大的调试方法是将变量和事件消息打印到控制台,并检查打印的值是否符合预期或代码执行中出现问题。

为了克服打印语句中的问题,开发人员可以使用断言语句。如果不满足其语句条件,Python 的内置断言方法会引发 AssertionError。

Python 使您可以在使用断言时灵活地启用或禁用。您可以在运行代码时使用 -0 参数来关闭程序中的所有断言语句。之后所有的assert方法都将不起作用。

尽管如此,大量的断言语句仍然会使代码不可读并且有点混乱。

使用记录器进行向后分析

用记录器替换所有打印语句是最专业、最强大的调试日志语句的方法。对于开发人员来说,它是一个重型武器,因为它为他们提供了更大的启用和禁用灵活性。此外,您可以设置日志级别来启用某些日志。

使用日志语句进行调试的最简单方法之一是在所有方法中添加调试语句。因此,当执行任何方法时,该方法将记录带有参数值的调试语句。开发人员可以使用装饰器函数,而不是在所有方法中编写日志语句,该函数将在内部记录参数的值。使用下面的代码片段创建一个装饰器函数,并 在要打印参数的所有方法之前添加@enable_args_debugger 。

光润云

无论应用程序是在云端还是本地,无论是在应用程序服务器上还是无服务器上运行,或者是容器化的,Lightrun Cloud都是一款免费工具,可以帮助开发人员轻松识别问题并快速解决问题。它减少了交付时间,并增加了实时添加日志或快照的灵活性,而无需更改代码。

使用 Lightrun 日志进行实时调试

代码发布后添加日志或断言语句是一个繁琐的过程。您可以使用 Lightrun Logs 添加日志,而不是调用 CI/CD 管道进行几行更改。它允许您在生产系统的运行时添加任意数量的日志。它可以与领先的 IDE 集成。有了这个工具,开发人员可以自由地专注于花哨的核心业务逻辑。 

使用 Lightrun 快照进行实时调试 

在许多情况下,开发人员很难理解执行流程。如果开发人员拥有堆栈跟踪和变量,他们就很容易了解是否缺少逻辑或条件执行是否未按预期工作。Lightrun 快照是虚拟断点,可以在不破坏系统的情况下提取所有数据。

借助 Lightrun,您可以拥有条件快照,与您正在使用的 IDE 集成,并在不破坏系统的情况下添加任意数量的快照。

使用 Lightrun 性能指标进行实时调试

错误不仅仅是逻辑缺失/错误。它们也可能是瓶颈和长查询。这些与性能相关的错误可以使用 Lightrun 来解决。您可以添加性能指标监控和日志示例,计算特定代码的执行次数,测量两个函数执行之间的时间,并收集系统统计信息,例如延迟和吞吐量计数器。
开发人员和 DevOps 工程师针对每种调试策略使用多种工具,例如远程调试、日志传送、应用程序性能监控和内存快照。然而,Lightrun Cloud 是满足开发人员所有调试需求的地方,包括日志记录、指标和 APM、快照以及远程调试它还与各种DevOps工具集成,可以顺利实现其优势。