pdb.set trace () powoduje zamrożenie nosetestów, nie wpada do debuggera

Uruchamiam zestaw testów (pliki. py) za pomocą nosetestów. Użycie klasyki

import pdb; pdb.set_trace()

The nosetests run just never completes. Po prostu wisi tam, gdzie ustawiono punkt przerwania, ale nigdy nie spada do debuggera pdb.

Jakieś pomysły, dlaczego tak jest? Próbowałem przenieść punkt przerwania do wielu różnych pozycji (inne funkcje testowe, inne pliki) bez skutku.
Author: Martijn Pieters, 2012-01-26

3 answers

Run nose with the -s / --nocapture Opcja i będziesz mógł zobaczyć monit pdb i normalnie wchodzić w interakcję z debuggerem.

Jeśli użycie wiersza poleceń oznacza:-

python manage.py  test -s [other-opts-and-args]
 56
Author: stderr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-15 09:24:16

Nos przechwytuje wyjście i przekierowuje je. Więc punkt przerwania jest trafiony, ale po prostu go nie widzisz. Musisz wyłączyć przekierowanie wyjściowe, aby wyjście debugowania pojawiło się na ekranie.

Nos może to zrobić za Ciebie, jeśli używasz:

from nose.tools import set_trace; set_trace()

Zamiast:

import pdb;pdb.set_trace()
 31
Author: Joe L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 04:42:43

W moim przypadku flag the Flag-s/--nocapture, nadal go nie rozwiązał i wrzucił kompilator do pdb.

Innym powodem, dla którego możesz się przyjrzeć, jest to, że jeśli używasz bazy danych, takiej jak MySQL, jako części testów, nie jest ona blokowana przez inny jednoczesny proces. W moim przypadku uruchomiłem powłokę Pythona do odpytywania bazy danych MySQL za pomocą SQL Alchemy i to zablokowało tabele. W rezultacie moje testy nosowe wisiały - nie biegały/wychodziły.

I killed the procesy Pythona, które zamykały tabele, a nos przywracał sniffing

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

 0
Author: jetpackdata.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 14:19:09