Debugowanie kodu z ipdb

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 :)

Komentarze

3 July, 2009, 6:11 p.m.:

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


Comments turned off