pdb.set_trace()导致冻结的nosetests,不会进入调试器

时间:2012-01-26 03:52:35

标签: python pdb nosetests

我正在使用nosetests运行一套测试(.py文件)。使用经典

import pdb; pdb.set_trace()
鼻子测试从未完成。它只是在设置断点的地方挂起,但永远不会掉入pdb调试器。

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

3 个答案:

答案 0 :(得分:56)

使用-s / --nocapture选项运行nose,您将能够看到pdb提示符并正常与调试器进行交互。

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

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

答案 1 :(得分:32)

Nose正在捕获输出并重定向它。因此,断点被击中,但你只是看不到它。您需要关闭输出重定向,以便调试输出显示在屏幕上。

如果你使用的话,Nose可以为你做这个:

from nose.tools import set_trace; set_trace()

而不是:

import pdb;pdb.set_trace()

答案 2 :(得分:0)

在我的情况下,标志为-s / - nocapture标志,仍然没有解析它并将编译器放入pdb。

您可以研究的另一个原因是,如果您使用MySQL等数据库作为测试的一部分,那么它不会被另一个同步进程锁定。在我的例子中,我已经启动了一个python shell来通过SQL Alchemy查询MySQL数据库并锁定了表。结果,我的鼻子测试挂了 - 没有跑/退出。

我杀死了锁定表格的蟒蛇进程,而Nose又回来了嗅探

<强>&GT; $ ps auxww | grep python | awk'{print $ 2}'| sudo xargs kill -9