断点法的使用

时间:2018-12-11 00:40:44

标签: python python-3.x methods built-in

我是python的新手,不确定断点方法的工作方式。它会为IDE或某些内置调试器打开调试器吗?

此外,我想知道调试器将如何运行。

例如,我使用Spyder,是否意味着如果使用breakpoint()方法,Spyder的调试器将打开,通过它可以打开Debugger下拉菜单,或者打开其他调试器?

我还想知道此函数与breakpointhook()方法一起工作的方式。

2 个答案:

答案 0 :(得分:3)

否,由于设置了断点,调试器不会自动打开自身

因此,您首先设置了一个断点(或更多),然后手动启动调试器

此后,调试器将照常执行您的代码,但是*到达断点时*停止执行指令-断点本身将不执行的指令 。它会在之前暂停,让您有机会执行一些调试任务,例如

  • 检查变量值,
  • 手动将
  • 设置变量设置为其他值
  • 继续逐步执行指令 (即仅下一条指令
  • 继续执行指令到下一个断点
  • 过早停止调试程序。

这是所有编程语言(及其IDE)的所有调试器的常见情况。

对于IDE,启动调试器将

  • 在其菜单系统中启用或显示调试说明,
  • 为他们显示工具栏,并将
  • 为其启用快捷键。

在没有设置至少一个断点的情况下,大多数调试器会不停地执行整个程序(就像在没有调试器的情况下启动它一样),因此您将没有机会执行任何调试任务。

((某些IDE可以选择以“第一条指令,然后是暂停” 模式启动调试器,因此在这种情况下,您无需预先设置断点


是的,breakpoint()内置函数(在Python 3.7中引入)停止执行程序,以调试模式进入程序,您可以使用Spyder的调试器下拉菜单。

(它不是 Spyders的调试器,只有其下拉菜单;使用的调试器仍为pdb,即默认 P ython D e B ugger。)

breakpoint()内置函数和breakpointhook()函数之间的连接(来自sys内置模块)非常简单-第一个直接调用第二个。

自然的问题是为什么我们需要两个行为完全相同的函数?

答案在设计中-通过更改breakpoint()函数的行为,可以{em>间接更改breakpointhook()函数。 / p>

例如,IDE创建者可以更改breakpointhook()函数的行为,以使其启动自己的调试器,而不是pdb调试器。

答案 1 :(得分:2)

内置breakpoint()的默认行为是在此时打开pdb调试器。

即默认情况下为行

breakpoint()

行为应与

相同
import pdb; pdb.set_trace()

可以通过修改sys.breakpointhook来自定义行为(例如,打开其他调试器)。通常,只有在实现调试器或功能类似于调试器的情况下,才会执行此操作。如果从IDE运行代码,则IDE本身应修改sys.breakpointhook,以便打开IDE调试器。 (我不知道是否所有的Python IDE都会这样做,但是他们应该这样做。)

有关更多信息(包括为何添加此功能的原理),请参见PEP 553 proposal。实际的实现已落入Python 3.7中。

相关问题