2012-01-26 80 views
51

我正在使用nosetests运行一套测试(.py文件)。使用经典pdb.set_trace()导致被冻结的nosetests,不会进入调试器

import pdb; pdb.set_trace() 

nosetests运行只是永远不会完成。它恰好挂在断点已设置的位置,但从不落入pdb调试器。

任何想法,为什么会这样?我试着将断点移动到许多不同的位置(其他测试函数,其他文件)都无济于事。

回答

55

-s/--nocapture选项运行的鼻子,你就可以看到PDB提示并通常与调试器进行交互。

如果使用,这意味着该命令行: -

python manage.py test -s [other-opts-and-args] 
+0

果然!谢谢迈克!没有意识到没有选项会让它只是吞下一切 – Bodhi

+3

如果你有setup.cfg,在[nosetests]下添加一行'nocapture = 1' –

30

鼻子捕捉输出并重定向它。所以,断点被击中,但你只是没有看到它。您需要关闭输出重定向,以便调试输出显示在屏幕上。

鼻子可以为你做这个,如果你使用:的

from nose.tools import set_trace; set_trace() 

代替:

import pdb;pdb.set_trace() 
+1

谢谢!不错的替代品 – Bodhi

+0

但它给我致命错误BdbQuit – CrazyGeek

0

在我的情况旗旗-s/- nocapture,还是没有解决问题,编译器拖放到PDB。

另一个可以研究的原因是,如果您使用数据库(如MySQL)作为测试的一部分,那么它不会被另一个同时进程锁定。就我而言,我已经启动了一个python shell来通过SQL Alchemy查询MySQL数据库,并且锁定了这些表。结果,我的鼻子测试挂了 - 没有运行/退出。

我杀了它被锁定了表蟒蛇流程和鼻子就是备份嗅

> $ PS auxww | grep python | awk'{print $ 2}'| sudo xargs kill -9