nosetests --pdb
让我停止错误或失败,但这对我的需求来说太迟了。在执行期间逐步执行代码可帮助我调试问题所在。
然而,nosetests是有用的,因为它们允许依赖相对导入的测试(即在包中进行测试)。
如何在执行测试之前设置断点? 目前我正在使用:
python -m pdb /path/to/my/nosetests testfile.py
此解决方案不充分。 Nosetests干扰pdb输出,我的键盘控制(例如箭头键)被破坏。
使用import pdb; pdb.set_trace()似乎是一个好主意,但是nosetests阻止了我对pdb控制台的访问。
答案 0 :(得分:131)
比记住使用-s
更好的方法是使用Nose附带的set_trace
变体。添加
from nose.tools import set_trace; set_trace()
无论你想进入调试器的哪个地方。 stdin / out重定向将为您处理。我遇到的唯一奇怪的副作用是在鼻子运行期间调试时无法从pdb(使用run
)重启代码。
答案 1 :(得分:109)
您可以添加
import pdb; pdb.set_trace()
您希望在调试器中停止的源中的任何位置。
确保将-s
传递给鼻子,以便它不会捕获stdout
。
答案 2 :(得分:4)
如果你有 ipython ,那么无限制使用:
import ipdb; ipdb.set_trace()
*无限可怕:就像ipython一样 - 自动完成,着色等。
答案 3 :(得分:0)