2012-01-26 3 views
51

Я запускаю набор тестов (.py-файлов) с использованием носетов. Использование классическогоpdb.set_trace() вызывает замороженные носетки, не попадает в отладчик

import pdb; pdb.set_trace() 

Носители, которые запускаются, никогда не заканчиваются. Он просто зависает прямо там, где установлена ​​точка останова, но никогда не падает в отладчик pdb.

Любые идеи, почему это было бы? Я попытался переместить точку останова на несколько разных позиций (другие тестовые функции, другие файлы) безрезультатно.

ответ

55

Run нос с опцией -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 для запроса базы данных MySQL через SQL Alchemy и заблокировал таблицы. В результате мои носовые тесты висели - не бегать/выходить.

Я убил процессы питона, которые запирание столов и нос был обратно нюхает

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