在不编辑源文件的情况下添加和删除断点
虽然您可以通过在代码中添加breakpoint()
orset_trace()
语句来添加断点,但这种方法存在两个问题:
- 首先,一旦开始运行代码,就无法删除断点。我经常发现,一旦我开始运行我的代码并到达一个初始断点,我想放置另一个断点并删除初始断点。将我放入调试器后
breakpoint()
,我可以添加额外的断点,但我无法删除最初的断点。虽然可以通过将初始breakpoint
语句放在更高的位置来缓解这种情况,但如果您有参数化测试,那么即使是有限的。我可能会发现自己cont
经常重复。
- 其次,它需要更改源代码。您需要记住
breakpoint()
在将任何代码提交到版本控制之前删除所有命令,您必须在切换分支之前删除它们等。我有时发现我想使用调试器来比较两个分支之间的测试运行,并且必须编辑源代码每次都添加断点的代码会使该操作变得相当慢且更容易出错。我什至可能想在我正在调用的库中添加一个断点,在这种情况下,我正在编辑的文件甚至可能不在我的 git 存储库中,而是在我的 conda 环境深处,增加了忘记删除它的风险。在我看来,编辑文件以添加断点是丑陋的。
要在不编辑任何源文件的情况下以交互方式添加和删除pytest
断点,可以按如下方式调用(在 bash shell 中):
python -mipdb $(type -p pytest) -s test_fileset.py
该-s
标志在这里至关重要,因为它阻止 pytest 与 stdin 和 stdout 混淆,并且当在调试器中运行时,pytest 将无法与 stdin 和 stdout 混淆,一切都会出错。对于不同的 shell,确切的调用语法会有所不同。