使用nosetests设置断点--pdb选项

Dev*_*vin 82 python testing nose pdb

nosetests --pdb让我停止错误或失败,但这对我的需求来说已经太迟了.在执行期间单步执行代码可帮助我调试问题所在.

但是,nosetests是有用的,因为它们允许依赖于相对导入的测试(即在包中进行测试).

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

python -m pdb /path/to/my/nosetests testfile.py
Run Code Online (Sandbox Code Playgroud)

这种解决方案是不够的.Nosetests干扰pdb输出,我的键盘控制(例如箭头键)被破坏.

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

Mat*_*ngo 134

甚至比记住使用更好的-s是使用set_traceNose附带的变体.加

from nose.tools import set_trace; set_trace()
Run Code Online (Sandbox Code Playgroud)

无论你想进入调试器的哪个地方.stdin/out重定向将为您处理.我遇到的唯一奇怪的副作用是run在鼻子运行期间调试时无法从pdb(使用)中重新启动代码.

  • 这完全适合我.:)谢谢马特! (6认同)
  • 这应该是公认的答案.它提供了原始pdb.set_trace()命令的所有常规功能. (3认同)

Ned*_*der 112

你可以加

import pdb; pdb.set_trace() 
Run Code Online (Sandbox Code Playgroud)

源中要在调试器中停止的任何位置.

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

  • 将-s标志添加到nosetests以防止它捕获stdout,并且你将能够正常使用pdb. (23认同)

Shu*_*ary 5

如果您拥有ipython,那么可以使用以下功能:

import ipdb; ipdb.set_trace() 
Run Code Online (Sandbox Code Playgroud)

*无限的超赞功能:就像ipython一样-自动补全,着色等