Python 断点breakpoint()

时间:2020-02-23 14:42:28  来源:igfitidea点击:

Python breakpoint()是Python 3.7中引入的新内置函数。
由于实际代码和调试模块代码之间的紧密联系,Python代码调试一直是一个痛苦的过程。

例如,如果您使用的是pdb调试器,则必须在程序代码中调用pdb.set_trace()
如果您想使用其他调试器,比如说" web-pdb",那么您将必须删除所有与pdb相关的代码,并添加" web_pdb.set_trace()"方法。
这在使用python调试器时造成了巨大的开销,并使python代码难以调试和维护。

这就是Python 3.7引入了breakpoint()方法的原因,该方法使我们能够编写松耦合的调试代码。

Python breakpoint()

Python breakpoint()函数调用sys.breakpointhook()函数。
默认情况下,sys.breakpointhook()调用pdb.set_trace()函数。
因此至少,使用breakpoint()可以使调试器使用起来更加方便,因为我们不必显式导入pdb模块。

让我们来看一个breakpoint()函数用法的简单示例。
我们有一个带有以下代码的python脚本python_breakpoint_examples.py。

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

breakpoint()

print(z)

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

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

Python breakpoint()–停止调试

Python sys.breakpointhook()函数使用环境变量PYTHONBREAKPOINT来配置调试器。
如果未设置,则使用默认的PDB调试器。

如果将其设置为" 0",则该函数会立即返回,并且不会执行任何代码调试。
当我们想在不调试的情况下运行代码时,这非常有帮助。

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

Python breakpoint()–更改调试器模块

我们可以使用PYTHONBREAKPOINT环境变量来提供要由breakpoint()函数调用的调试器方法。
这非常有帮助,因为我们可以轻松更改调试器模块,而无需进行任何代码更改。

假设我们要使用" web-pdb"调试器。
我们可以使用PYTHONBREAKPOINT = web_pdb.set_trace轻松将其连接到我们的程序中。

首先,请确保已安装web-pdb。
您可以使用pip3.7 install web-pdb命令进行安装。

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

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

打开控制台日志中提供的Web服务器URL,您将看到调试器窗口。

我们可以使用此UI发出PDB命令,您可以发送命令" c"继续并完成我们的程序。