Python断点()

Python中的breakpoint()是Python 3.7引入的新内置函数。Python代码调试一直是一个痛苦的过程,因为实际代码与调试模块代码之间的紧密耦合。例如,如果您正在使用,那么您将不得不在程序代码中调用。如果您想使用其他调试器,比如,那么您将不得不删除与PDB相关的所有代码,并添加。这导致在使用Python调试器时产生巨大的开销,并使Python代码难以调试和维护。这就是为什么Python 3.7引入了breakpoint()方法,它允许我们编写松散耦合的调试代码。

Python breakpoint()

Python的breakpoint()函数调用sys.breakpointhook()函数。默认情况下,sys.breakpointhook()调用pdb.set_trace()函数。因此,至少使用breakpoint()在使用调试器时提供了方便,因为我们不必显式导入pdb模块。让我们看一个breakpoint()函数的简单用法示例。我们有一个名为python_breakpoint_examples.py的Python脚本,其中包含以下代码。

x = 10
y = 'Hi'
z = 'Hello'
print(y)

breakpoint()

print(z)

当我们执行此脚本时,PDB调试器控制台会打开。

$python3.7 python_breakpoint_examples.py
Hi
> /Users/pankaj/Documents/PycharmProjects/BasicPython/basic_examples/python_breakpoint_examples.py(8)()
-> print(z)
(Pdb) c
Hello
$

Python断点() – 停止调试

Python sys.breakpointhook() 函数使用环境变量 PYTHONBREAKPOINT 来配置调试器。如果未设置,则使用默认的PDB调试器。如果设置为“0”,则该函数立即返回,不进行代码调试。在我们希望在不调试的情况下运行代码时,这非常有帮助。

$PYTHONBREAKPOINT=0 python3.7 python_breakpoint_examples.py
Hi
Hello
$

Python断点() – 更改调试器模块

我们可以使用PYTHONBREAKPOINT环境变量来提供要由断点()函数调用的调试器方法。这非常有帮助,因为我们可以在不进行任何代码更改的情况下轻松更改调试器模块。假设我们想使用 web-pdb 调试器。我们可以通过 PYTHONBREAKPOINT=web_pdb.set_trace 轻松地将其挂接到我们的程序中。首先确保安装了web-pdb。您可以使用 pip3.7 install web-pdb 命令进行安装。

根据 web-pdb 文档,它与Python 3.7中添加的新断点()函数兼容。

$PYTHONBREAKPOINT=web_pdb.set_trace python3.7 python_breakpoint_examples.py
Hi
2018-08-10 12:49:54,339: root - web_console:110 - CRITICAL - Web-PDB: starting web-server on pankaj:5555...

打开控制台日志中提供的 Web 服务器 URL,您将看到调试器窗口,如下图所示。我们可以使用此 UI 发出 PDB 命令,您可以发送命令“c”以继续并完成我们的程序。

摘要

Python 的 breakpoint() 函数是 Python 调试功能中非常有帮助的新增功能。建议在调试时使用此功能,以便您可以轻松地即时挂接其他第三方调试器。它还提供了一个简单的选项来禁用调试器并正常运行程序。

您可以从我们的 GitHub 存储库查看更多 Python 示例。

参考: 官方文档

Source:
https://www.digitalocean.com/community/tutorials/python-breakpoint