2012-01-26 73 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