引起冻结nosetests的pdb.set_trace()不会进入debugging器

我使用nosetests运行一套testing(.py文件)。 使用经典

import pdb; pdb.set_trace() 

鼻子testing运行永远不会完成。 它只是挂在断点已经设置好的地方,但是永远不会进入pdbdebugging器。

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

-s / --nocapture选项运行鼻子,您将能够看到pdb提示符,并与debugging器正常交互。

如果使用命令行,则意味着: –

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

鼻子正在捕获输出并redirect它。 所以,这个断点是被打的,但是你根本看不到它。 您需要closures输出redirect,以便debugging输出显示在屏幕上。

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

 from nose.tools import set_trace; set_trace() 

代替:

 import pdb;pdb.set_trace() 

在我的情况下,flag -s / -nocapture标志仍然没有解决,并把编译器放到pdb中。

你可以考虑的另外一个原因是,如果你使用MySQL等数据库作为testing的一部分,那么它不会被另一个同时进程locking。 就我而言,我已经启动了一个python shell来通过SQL Alchemy查询MySQL数据库,并且locking了这些表。 结果,我的鼻子testing挂了 – 没有运行/退出。

我杀死了锁在桌子上的python进程,鼻子还在嗅探着

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