添加和删除断点而无需编辑源文件
尽管可以通过在代码中添加breakpoint()
或set_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陷入混乱,并且一切都会出错。对于不同的外壳,确切的调用语法将有所不同。