90

nosetests --pdb让我在错误或失败时停下来,但这对我的需要来说太晚了。在执行期间单步执行代码有助于我调试问题所在。

但是,nosetests 很有帮助,因为它们允许依赖于相对导入的测试(即包中的测试)。

如何在执行测试之前设置断点?目前我正在使用:

python -m pdb /path/to/my/nosetests testfile.py

这个解决方案是不够的。Nosetests 会干扰 pdb 输出,并且我的键盘控件(例如箭头键)已损坏。

使用导入 pdb;pdb.set_trace() 似乎是个好主意,但是 nosetests 阻止了我对 pdb 控制台的访问。

4

4 回答 4

145

比记住使用更好-s的是使用set_traceNose 附带的变体。添加

from nose.tools import set_trace; set_trace()

无论您想在哪里闯入调试器。标准输入/输出重定向将为您处理。我遇到的唯一奇怪的副作用是run在鼻子运行期间调试时无法从 pdb(使用)中重新启动代码。

于 2011-09-21T02:26:18.407 回答
122

你可以加

import pdb; pdb.set_trace() 

您想要在调试器中停止的源代码中的任何位置。

确保你传递-s到鼻子,这样它就不会捕捉到stdout

于 2011-02-09T21:28:45.030 回答
5

如果您有ipython,请无限使用:

import ipdb; ipdb.set_trace() 

*无限的精彩:就像 ipython - 自动完成,着色等。

于 2016-08-22T10:45:18.357 回答
1

如果您使用的是pytest,则可以使用

import pytest; pytest.set_trace()

请参阅文档

于 2019-06-21T12:40:13.233 回答