Debugowanie pythonowych aplikacji z wdb

wdb to pythonowy debugger z webowym interfejsem (architektura serwer-klient). Za jego pomocą można debugować praktycznie każdy typ aplikacji napisanej w Pythonie. Może to być prosty skrypt, czy aplikacje napisane w Tornado, Django, czy Flasku. Serwer wdb jest kompatybilny z wielowątkowymi i wieloprocesowymi aplikacjami. To co wyróżnia ten debugger to łatwość użycia i bardzo poręczny interfejs.

Serwer wdb

Wystarczy zainstalować:
pip install wdb
I uruchomić serwer:
wdb.server.py &

Debugowanie

Proste skrypty można debugować je tak:
python -m wdb your_file.py
Odpali to w przeglądarce sesje debuggera ze skryptem zatrzymanym na początku:
Debugger wdb w akcji

Po prawej mamy cały stos wykonywania, po lewej kod aplikacji, a poniżej interaktywną konsolę. W konsoli tej możemy też wydawać polecenia debuggerowi. Wykonanie .s przejdzie do kolejnego brake-point (czy jak w tym przypadku do kolejnej linii).

Debugując kod zazwyczaj będzie nam zależało na ustawianiu break-pointów, w których wykonywanie zostanie zatrzymane. Wystarczy zaimportować wdb i ustawić w interesującym nas miejscu breake-point:

wdb.set_trace()
Także rzucenie wyjątku odpali sesję debugera.

Django

Jedną z możliwości jest debugowanie Django. W wsgi.py musimy znaleźć
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
I po tym dodać:
from wdb.ext import WdbMiddleware
application = WdbMiddleware(application)
W settings.py musimy mieć ustawione:
DEBUG = True
DEBUG_PROPAGATE_EXCEPTIONS = True
I gotowe. Każdy wyjątek lub break-point odpali w przeglądarce sesję debuggera.
wdb debugujący aplikację Django
W niektórych IDE jak np. PyCharm dostępne są podobne debuggery. Ich funkcjonalność jest bardzo podobna, jak nie identyczna. Nie trzeba w kodzie wstawiać break-pointów, tylko oznaczać je w edytorze kodu IDE. Z drugiej strony wdb nie jest zależne od jednego specyficznego (i np. płatnego/komercyjnego) IDE jak i jest łatwe w konfiguracji i użyciu dla praktycznie dowolnego typu aplikacji.
RkBlog

Podstawy Pythona, 30 June 2013

Comment article
Comment article RkBlog main page Search RSS Contact