Debuguj Pythona jak bohater za pomocą tych bibliotek i narzędzi

Czy chcesz stać się mistrzem w usuwaniu błędów w kodzie Pythona? Poznaj te fantastyczne narzędzia i biblioteki, które ułatwią Ci proces debugowania! Wkrótce zagłębimy się w szczegóły.

Python, wszechstronny język programowania wysokiego poziomu, znajduje zastosowanie w wielu obszarach. Jest potężnym narzędziem, które sprawdza się zarówno w tworzeniu aplikacji internetowych, jak i w zaawansowanych projektach związanych z analizą danych i uczeniem maszynowym.

Podczas pisania kodu nieuniknione są błędy. Dlatego programiści podejmują szereg działań, aby te błędy wykryć i wyeliminować, zarówno te już obecne, jak i te, które mogą się pojawić. Dzięki temu możemy zapobiec nieoczekiwanym awariom naszego programu. Ten proces nazywamy debugowaniem.

W tym artykule przeanalizujemy kilka dostępnych debugerów Pythona, zwracając szczególną uwagę na to, co je wyróżnia i jak skutecznie je wdrożyć.

cProfiler – biblioteka do profilowania

cProfiler to popularna biblioteka, napisana w C, która służy do profilowania kodu działającego przez dłuższy czas. Jej głównym zadaniem jest identyfikacja tych fragmentów kodu, których wykonanie zajmuje najwięcej czasu. Chociaż cProfiler potrafi precyzyjnie określić czas potrzebny na realizację poszczególnych sekcji, nie jest narzędziem do wykrywania i naprawiania błędów.

W związku z tym konieczne jest użycie innych, bardziej wyspecjalizowanych debugerów.

Na szczęście istnieje szereg bibliotek, które można wykorzystać jako narzędzia do debugowania kodu Pythona, w tym ipdb, Django-debug-toolbar, pyelftools, viztracer i py-spy.

ipdb – interaktywny debuger

Ipdb, to debugger Pythona, który korzysta z możliwości protokołu IPython. Jest to interaktywne narzędzie, które zawiera funkcjonalność pdb oraz zapewnia obsługę powłoki IPython, oferując m.in. uzupełnianie za pomocą tabulatora, kolorowanie składni i magiczne funkcje. Ipdb daje dostęp do debugera IPython poprzez udostępnienie odpowiednich funkcji i oferuje intuicyjny interfejs, podobny do modułu pdb.

Debugowanie z użyciem Ipdb

Aby zainstalować bibliotekę, użyj poniższego polecenia:

pip install ipdb

Przykładowe użycie ipdb wyglądałoby następująco:

import ipdb
alpha_list = ['a', 'b', 'c']
fruit_list = ['orange', 'mango', 'kiwi']

def nested_loop():
    for fruit in fruit_list:
        print (fruit)
        ipdb.set_trace()
    for x in alpha_list:
        print(x)
if __name__ == '__main__':
    nested_loop()

Aby uruchomić plik Pythona z debugerem, użyj polecenia (gdzie test.py to nazwa pliku):

python -m ipdb test.py

Import ipdb i wywołanie funkcji ipdb.set_trace() powoduje uruchomienie programu i włączenie debugera w trakcie jego działania.

Funkcja ipdb.pm() (post-mortem) działa podobnie do magicznej funkcji %debug.

Argumenty funkcji set_trace

Możesz przekazać kontekst jako argument do funkcji set_trace, aby wyświetlić kilka zdefiniowanych linii kodu. Argument cond, przyjmowany przez set_trace, akceptuje wartości logiczne. Interfejs ipdb uruchomi się, gdy cond ustawi się na true.

Plik konfiguracyjny

Ustaw argument kontekstu, korzystając z pliku idpdb lub setup.cfg, znajdujących się odpowiednio w folderze domowym i folderze projektu. Zachęcamy do dalszego eksplorowania możliwości ipdb.

Django Debug Toolbar – pasek narzędzi do debugowania

Django Debug Toolbar to popularne narzędzie do debugowania w frameworku Django.

Jest to konfigurowalny zestaw paneli, który wyświetla informacje debugowania bieżącego żądania i odpowiedzi. Kliknięcie na pasek narzędzi wyświetli szczegółowe informacje o zawartości panelu.

To narzędzie pozwala na dokładne przeanalizowanie środowiska programistycznego Django.

Proces instalacji i konfiguracji znajduje się tutaj.

Pyelftools – biblioteka do analizy plików ELF

Pyelftools, napisana w całości w Pythonie, analizuje pliki ELF i informacje debugowania DWARF. Do działania wymaga jedynie Pythona.

Korzystanie z Pyelftools jest proste, ponieważ nie wymaga dodatkowych bibliotek. Co więcej, użycie pyelftools bez instalacji jest również łatwe – wystarczy dostosować zmienną środowiskową PYTHONPATH.

Instalacja odbywa się za pomocą polecenia:

pip install pyelftools 

Aby skorzystać z biblioteki, wystarczy ją zaimportować i wywołać w kodzie programu.

IceCream – narzędzie do debugowania

IceCream to kolejne efektywne narzędzie do debugowania dla programistów Pythona.

Używając IceCream, a w szczególności funkcji ic(), uzyskujemy szereg korzyści w porównaniu z funkcją print(), takich jak:

  • Szybsze pisanie.
  • Czytelne drukowanie struktur danych.
  • Wyświetlanie wyrażeń lub nazw zmiennych i ich wartości za pomocą ic().
  • Podkreślenie składni danych wyjściowych.
  • Opcjonalne wyświetlanie kontekstu programu, w tym nazwy pliku, numeru linii i funkcji nadrzędnej.

Przed użyciem pakietu, zainstaluj go za pomocą polecenia:

pip install icecream

Dzięki funkcji install() możesz korzystać z ic() we wszystkich plikach bez konieczności importowania, a dodatkowo funkcja ta dodaje ic() do wbudowanego modułu. Pliki importowane przez interpreter będą miały dostęp do ic().

W swoim głównym pliku Pythona (np. x.py), dodaj ic() za pomocą funkcji install().

from icecream import install
install()
from y import mult
mult()
 

W pliku y.py, z którego importowany jest plik x.py, wywołaj ic():

def mult():
    z=8
    ic(z)

Wynik:

y
ic| z : 8

Funkcja ic() jest niezwykle użyteczna, ponieważ sprawdza przekazywane do niej zmienne, w tym sama siebie, a następnie wyświetla jej argumenty i wartości, jak w poniższym przykładzie:

from icecream import ic
def mult(x):
    return x * 4
ic(mult(100))

Wyjście:

ic| mult(100): 400

Co więcej, ic() można łatwo wstawić do istniejącego kodu, ponieważ zwraca ona swoje argumenty. W poniższym przykładzie otrzymamy kolejno ic| x: 12, a potem ic| y: 48.

from icecream import ic
x = 12
def mult(x):
    return x*4
    y = mult(ic(x))
    ic(y)

Py-spy – narzędzie do profilowania kodu

Możesz użyć py-spy do profilowania próbek programów Pythona w celu debugowania. Py-spy wizualizuje wykonanie programu bez konieczności jego ponownego uruchamiania lub modyfikowania. Dodatkowo, ze względu na to, że jest napisany w języku Rust, obciążenie jest minimalne.

Warto również zaznaczyć, że py-spy jest bezpieczny w użyciu w produkcyjnym kodzie Pythona, ponieważ działa w innym procesie niż profilowany program.

Jak każde inne omówione narzędzie, py-spy należy zainstalować:

pip install py-spy 

Nawet jeśli program w Pythonie obsługuje ruch produkcyjny, możesz go profilować i debugować za pomocą py-spy, co czyni go niezbędnym narzędziem.

Viztracer – narzędzie do śledzenia i wizualizacji

Alternatywnie, możesz użyć viztracer, narzędzia do śledzenia i wizualizacji wykonywania kodu Pythona, które również służy do profilowania z niskim narzutem.

Co sprawia, że viztracer jest skutecznym debugerem?

  • Jest łatwy w użyciu i nie wymaga zewnętrznych pakietów.
  • Viztracer działa na wszystkich platformach: Windows, Linux i macOS.
  • Posiada wydajny front-end, który płynnie renderuje ślady o wielkości gigabajtów.
  • Używa wyrażeń regularnych do rejestrowania dowolnych funkcji i dodatkowych informacji, takich jak zmienne i atrybuty, zgłoszone wyjątki, operacje garbage collector, itp. bez modyfikacji kodu źródłowego.
  • Viztracer umożliwia filtrowanie danych, które nie są potrzebne, zachowuje istotne informacje i zapisuje logi w formacie JSON, dzięki czemu jest to narzędzie o niskim narzucie.
  • Można go użyć do wstawiania niestandardowych zdarzeń, takich jak zdarzenia natychmiastowe, zdarzenia zmienne oraz zdarzenia czasowe w trakcie działania programu. Działa to podobnie do debugowania z użyciem funkcji print, z tą różnicą, że viztracer informuje, kiedy drukowanie ma miejsce podczas śledzenia danych.

Podsumowanie

Profilowanie i debugowanie w Pythonie, to kluczowy etap rozwoju oprogramowania, który wymaga uwagi. Pomaga on w eliminacji błędów i optymalizacji wydajności kodu.

Narzędzia, które omówiliśmy, są skuteczne i ułatwiają pracę programistom Pythona.

Mając na uwadze, że inne narzędzia działają bardziej efektywnie niż cProfiler, możesz, jak prawdziwy mistrz, debugować kod Pythona i naprawiać potencjalne błędy, dzięki czemu Twój kod będzie działał bezproblemowo.

Udanych sesji debugowania!


newsblog.pl