使用nosetests --pdb选项设置断点
nosetests --pdb
这个命令可以让我在出现错误或失败时暂停,但对我来说,这个时机太晚了。我希望在代码执行时逐步查看,这样能帮助我找到问题所在。
不过,nosetests 还是挺有用的,因为它支持依赖相对导入的测试(也就是在一个包里的测试)。
我该如何在测试执行之前设置断点呢?目前我使用的是:
python -m pdb /path/to/my/nosetests testfile.py
这个方法不太够用。nosetests 会干扰 pdb 的输出,而且我的键盘控制(比如方向键)也失灵了。
使用 import pdb; pdb.set_trace()
似乎是个好主意,但 nosetests 阻止了我访问 pdb 控制台。
4 个回答
5
如果你有ipython,想要体验无限的酷炫功能,可以使用:
import ipdb; ipdb.set_trace()
*无限的酷炫功能:就像ipython一样,支持自动补全、代码高亮等等。
149
比起记得使用 -s
,更好的办法是用 Nose 提供的 set_trace
变体。你只需要在想要进入调试器的地方添加
from nose.tools import set_trace; set_trace()
就可以了。输入和输出的重定向会自动处理。唯一我遇到的奇怪副作用是,在使用 Nose 运行调试时,无法在 pdb 中通过 run
命令重新启动代码。
125
你可以在你的代码里任何地方添加
import pdb; pdb.set_trace()
这样可以让调试器在你指定的地方停下来。
记得在运行nose的时候加上 -s
这个参数,这样它就不会捕捉到 stdout
的输出了。