nosetests --pdb
pozwól mi zatrzymać się w przypadku błędu lub niepowodzenia, ale na moje potrzeby jest już za późno. Przechodzenie przez kod podczas wykonywania pomaga mi debugować, gdzie jest problem.
Jednak testy nosowe są pomocne, ponieważ pozwalają na testy, które opierają się na imporcie względnym (tj. Testy w pakiecie).
Jak ustawić punkty przerwania przed wykonaniem testów? Obecnie używam:
python -m pdb /path/to/my/nosetests testfile.py
To rozwiązanie nie jest adekwatne. Nosetesty kolidują z wyjściem pdb, a moje elementy sterujące na klawiaturze (np. Klawisze strzałek) są zepsute.
Korzystanie z importu pdb; pdb.set_trace () wydaje się dobrym pomysłem, jednak nosetests blokuje mi dostęp do konsoli pdb.
from nose.tools import set_trace; set_trace()
Nawet lepiej niż pamiętanie o użyciu
-s
jest skorzystanie zset_trace
wariantu dołączonego do Nosa. Dodajfrom nose.tools import set_trace; set_trace()
gdziekolwiek chcesz włamać się do debuggera. Zadbamy o przekierowanie stdin / out. Jedynym dziwnym efektem ubocznym, na jaki się natknąłem, jest niemożność ponownego uruchomienia kodu z poziomu pdb (przy użyciu
run
) podczas debugowania podczas kataru.źródło
pdb
uruchomieniu? Jestem pewien, że są dokumenty, ale z góry mojej głowy -s
„wchodzi” do wywołania funkcji,n
przechodzi do instrukcji „next”,u
przesuwa „w górę” stosu id
przesuwa „w dół”. Możesz użyćb
do ustawiania punktów przerwania ic
"kontynuowania" oraz wyjścia z debugera krokowego. Mam nadzieję, że to pomoże!Jeśli masz ipython , użyj nieograniczonej niesamowitości :
import ipdb; ipdb.set_trace()
* nieograniczona niesamowitość: podobnie jak ipython - automatyczne uzupełnianie, kolorowanie itp.
źródło
Jeśli korzystasz z pytest , możesz użyć
import pytest; pytest.set_trace()
Zobacz dokumentację .
źródło