Debugowanie kodu z ipdb
- Opublikowano January 20, 2009
- komentarze 1
Na pewno każdy kto programuje w Pythonie, słyszał o ipythonie, ale
czy każdy wie co to jest pdb lub ipdb ?
ipdb jest rozbudowaną wersją debuggera pdb o podobnych
właściwościach co ipython w porównaniu do zwykłego interpretera
python'a. Gdy uczyłem się programować w python'ie około dwa lata
temu do debugowania używałem po prostu "print" co nie jest dobrym
rozwiązaniem. Jakiś czas temu dowiedziałem się o debuggerze pdb.
Jest to debugger który jest częścią biblioteki standardowej, który
umożliwia przerwanie wykonywanego kodu python'a i przejście do
sesji interaktywnej python'a. Gdy program zostanie zatrzymany przez
debugger pdb, mamy możliwość podglądania zmiennych, modyfikacje
itd, słowem wszystko co możemy zrobić w interpreterze python'a.
Używanie debuggera
W miejscu w którym chcemy aby debugger się zatrzymał i wszedł do sesji interaktywnej, wpisujemy:
import pdb pdb.set_trace()
Gdy program dojedzie do tego miejsca, wykonywanie dalszego kodu
zostanie zatrzymane i uruchomiona zostanie interaktywna sesja
interpretera python'a.
Komendy:
- help (h) - drukuje listę dostępnych poleceń,
- help NAZWA_POLECNIA - drukuje pomoc dla tego polecenia,
-
where (w) - pokazuje listę wywołań, strzałką będzie oznaczone miejsce w którym aktualnie się jest,
-
list (l) - pokazuje kod źródłowy aktualnie wykonywanego kodu oraz miejsce w którym zatrzymał się debugger,
-
down (d) - skok w dół na liście wywołań,
-
up (p) - skok w górę na liście wywołań,
-
step (s) - wykonanie linii na której zatrzymał się debugger oraz wejście do środka wykonywanego kodu,
-
next (n) - wykonanie linii oraz przejście do następnej linii bez wchodzenia do środka wykonywanego kodu,
-
continue (c) - kontynuacja wykonywania kodu do następnego zatrzymania (pdb.set_trace())
Więcej poleceń znajdziemy w dokumentacji pdb
Teraz cała magia zaczyna się gdy zamiast pdb użyjemy ipdb
Instalacja ipdb
Aby zainstalować ipdb, najprościej jest skorzystać z easy_install:
easy_install ipdb
Teraz w kodzie który chcemy zatrzymać wpisujemy:
import ipdb ipdb.set_trace()
I mamy interaktywną sesje w interpreterze ipython'a :)
Dzięki ipdb, w ciągu ostatnich miesięcy, wielokrotnie udało mi się
znaleźć błędy w kodzie które normalnie były by bardzo trudne do
wykrycia. Polecam każdemu, kto chce odczuwać przyjemność z
znajdowania błędów, z ipdb staje się to bardzo przyjemne :)
Zainstalowałem ipdb, ale chyba ma problemy z pythonem 2.6.2 - po wstawieniu set_trace() z ipdb nic się nie dzieje, natomiast pdb działa poprawnie - może masz jakiś pomysł?
Najlepsze jest to, że wiele znanych mi osób nie ma pojęcia, że debugger pythona jest zintegrowany w samym pythonie :D