Pdb.set_trace() вызывает замороженные носеты, не попадает в отладчик

Я запускаю набор тестов (.py файлов), используя nosetests. Использование классического

import pdb; pdb.set_trace()

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

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

Ответ 1

Запустите нос с опцией -s/--nocapture, и вы сможете увидеть приглашение pdb и нормально взаимодействовать с отладчиком.

Если используется командная строка, это означает: -

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

Ответ 2

Нос записывает вывод и перенаправляет его. Итак, точка останова поражена, но вы ее просто не видите. Вам нужно отключить перенаправление вывода, чтобы на экране появился вывод отладки.

Нос может сделать это для вас, если вы используете:

from nose.tools import set_trace; set_trace()

вместо:

import pdb;pdb.set_trace()

Ответ 3

В моем случае флаг флаг -s/- nocapture, все еще не решил его и отбросил компилятор в pdb.

Еще одна причина, по которой вы могли бы задуматься, - это использовать базу данных, такую ​​как MySQL, как часть ваших тестов, чтобы она не была заблокирована другим одновременным процессом. В моем случае я запустил оболочку python для запроса базы данных MySQL через SQL Alchemy и заблокировал таблицы. В результате мои носовые тесты были висящими - не бегать/выходить.

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

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