|
本文最初发表在Sentry上。感谢您对合作伙伴的支持,使 SitePoint 成为可能。 Play Next Unmute Current Time 0:05 / Duration 2:00 Fullscreen Backward Skip 10s Play Video Forward Skip 10s Sentry 更强大的功能之一是与 Python 等语言一起提供的。在 Python、PHP 和 JVM 中,我们能够更深入地了解运行时,并为您提供有关调用堆栈中每个帧的附加数据。在较高的层次上,这可以让您了解诸如调用函数参数之类的事情,从而使您可以更轻松地重现和理解错误。让我们深入了解一下它是什么样子的,以及它在幕后是如何工作的。 我们将从Python 错误在终端或标准日志系统中通常的样子开始:虽然这让我们了解错误的类型和位置,但不幸的是,它并不能帮助我们了解真正导致错误的原因。它有可能传递一个整数或 NoneType,但实际上,它可以是任意数量的东西。
猜测只能让我们到目前为止,我们确实需要知道function到底是什么。 一个简单且通常非常容易实现的选项是添加一些日志记录。我们可以在几个不同的入口点放置日志记录,这使得它更容易实现。它还可以让我们确保我们得到我们想要的答案。例如,我们想弄 WhatsApp 号码数据 清楚 oftype是什么function: import logging # ... logging.debug("function is of type %s", type(function)) 像这样的日志记录的另一个好处是它可以延续到生产中。结果通常是您不会在生产中记录 DEBUG 级别的日志语句,因为该量可能很大并且不是很有用。它还通常要求您提前计划,以确保记录可能发生的各种失败案例以及每个失败案例的适当背景。 为了本教程的目的,我们假设我们无法在生产中执行此操作,没有提前计划,而是尝试在开发中调试和重现此操作。
Python 调试器 Python调试器(PDB) 是一种允许您使用断点单步调试调用堆栈的工具。该工具本身受到 GNU 调试器 (GDB) 的启发,虽然功能强大,但如果您不熟悉它,通常可能会不知所措。这绝对是一种通过重复会变得更容易的体验,我们只会在我们的示例中讨论一些高级概念。 因此,我们要做的第一件事是检测我们的代码以添加断点。在上面的例子中,我们实际上可以symbolizer.py自己检测。情况并非总是如此,因为有时异常会发生在第三方代码中。无论您在何处使用它,您仍然可以在堆栈中上下跳跃。让我们从更改该代码开始我们将此限制为异常,因为通常您的代码在大多数情况下都会成功运行,有时在循环中,并且您不希望在每次迭代时暂停执行。 一旦我们到达这个断点(这就是正在set_trace()注册的断点),我们将进入一个特殊的类似 shell ell 类似。
|
|