Möchten Sie Ihre Fähigkeiten im Bereich Python-Debugging auf ein neues Level heben? Dann sind Sie hier genau richtig! In diesem Artikel stellen wir Ihnen eine Auswahl an erstklassigen Python-Debugging-Werkzeugen und -Bibliotheken vor, die Ihnen dabei helfen werden, Fehler in Ihrem Code effizient zu finden und zu beheben.
Python ist eine vielseitige, objektorientierte und hoch entwickelte Programmiersprache, die in unterschiedlichsten Entwicklungsbereichen Anwendung findet. Von der Webentwicklung über Web Scraping bis hin zu anspruchsvollen Aufgaben wie maschinellem Lernen und Data Science – Python erweist sich immer wieder als ein äußerst effektives Werkzeug.
Bei der Softwareentwicklung treten immer wieder Fehler auf, die auch als „Bugs“ bezeichnet werden. Um diese Fehler zu identifizieren und zu beseitigen, setzen Entwickler auf den Prozess des Debuggings. Hierbei werden bestehende und potenzielle Fehler im Code aufgespürt, wodurch sichergestellt wird, dass die Software fehlerfrei funktioniert.
Dieser Artikel bietet einen Überblick über verschiedene Python-Debugger, die Ihnen zur Verfügung stehen. Wir werden uns die Unterschiede dieser Debugger genauer ansehen und untersuchen, was ihre jeweilige Implementierung so wirkungsvoll macht.
Die cProfiler-Debugging-Bibliothek
cProfiler ist eine weit verbreitete Bibliothek und C-Erweiterung, die zur Profilerstellung von Code verwendet wird, der eine längere Ausführungszeit benötigt. Sie identifiziert Codeabschnitte, die für eine längere Ausführungsdauer verantwortlich sind. Obwohl cProfiler die genaue Zeit ermittelt, die für die Ausführung der verschiedenen Codeabschnitte benötigt wird, ist er nicht dazu gedacht, Fehler im Code zu identifizieren oder zu beheben.
Aus diesem Grund ist es oft notwendig, auf andere Debugging-Tools zurückzugreifen.
Glücklicherweise stehen Ihnen eine Reihe empfehlenswerter Bibliotheken wie ipdb, Django-debug-toolbar, pyelftools, viztracer und py-spy zur Verfügung, die sich hervorragend als Debugging-Tools für Ihren Python-Code eignen.
Das ipdb-Debugging-Tool
Der ipdb (Interactive Python Debugger) ist ein interaktiver Debugger von Drittanbietern mit voller IPython-Funktionalität, der die Fähigkeiten von pdb erweitert. ipdb zeichnet sich durch seine Unterstützung der interaktiven IPython-Shell aus, einschließlich Tab-Vervollständigung, Farbunterstützung und magischen Funktionen.
Dieser Debugger ermöglicht den Zugriff auf den IPython-Debugger, indem er relevante Funktionen exportiert und eine ähnliche Schnittstelle wie das pdb-Modul für eine verbesserte Selbstbeobachtung bereitstellt.
Debugging mit ipdb
Um ipdb nutzen zu können, muss die Bibliothek mit folgendem Pip-Befehl installiert werden:
pip install ipdb
Ein typisches Beispiel für die Verwendung von ipdb sieht wie folgt aus:
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()
Führen Sie die Python-Datei mit dem folgenden Befehl aus, wobei test.py der Name Ihrer Datei ist:
python -m ipdb test.py
Durch den Import von ipdb und die Ausführung der Funktion ipdb.set_trace() wird der Debugger während der Programmausführung gestartet.
Die Funktion ipdb.pm() (post-mortem) verhält sich ähnlich wie die magische Funktion %debug.
set_trace-Argumente
Sie können den Kontext als Argument an set_trace übergeben, um mehrere definierte Codezeilen anzuzeigen. Darüber hinaus akzeptiert cond, das ebenfalls als Argument für set_trace fungiert, boolesche Werte. Die ipdb-Schnittstelle wird gestartet, wenn Sie cond auf true setzen.
Konfigurationsdatei verwenden
Das Kontextargument kann mit einer idpdb-Datei oder einer setup.cfg-Datei festgelegt werden, die sich im Home- bzw. Projektordner befinden. Wir empfehlen Ihnen, die Funktionalitäten von ipdb genauer zu erkunden.
Die Django Debug-Symbolleiste
Die Django-Debug-Symbolleiste ist ein beliebtes Debugging-Tool für Django, einem Python-Framework.
Diese konfigurierbare Sammlung von Fenstern zeigt Debug-Informationen zu einer aktuellen Anfrage oder Antwort an. Durch Klicken auf die Symbolleiste werden weitere Details zu den einzelnen Bereichen angezeigt.
Dieses Tool ermöglicht eine gründliche Analyse der Django-Entwicklungsumgebung.
Eine detaillierte Installationsanleitung und weitere Informationen zur Konfiguration finden Sie hier.
Die Pyelftools-Bibliothek
Die pyelftools-Bibliothek ist vollständig in Python geschrieben. Sie analysiert und parst ELF-Dateien und DWARF-Debugging-Informationen und ist ohne externe Bibliotheken lauffähig.
Die Verwendung von Pyelftools ist denkbar einfach, da keine zusätzlichen Bibliotheken erforderlich sind. Zudem ist die Installation optional: es reicht aus, PYTHONPATH in den Umgebungsvariablen anzupassen.
Die Installation erfolgt über:
pip install pyelftools
Die Implementierung von pyelftools ist ebenfalls unkompliziert und erfordert lediglich den Import und Aufruf in Ihrem Programm.
Das Icecream 🍦 Debugging-Tool
Icecream ist ein weiteres effektives Debugging-Tool für Python-Entwickler.
Die Verwendung von Icecream, auch bekannt als ic(), bietet gegenüber dem traditionellen print()-Befehl einige Vorteile:
- Das Tippen ist schneller und einfacher.
- Datenstrukturen werden übersichtlich ausgegeben.
- Ausdrücke oder Variablennamen und ihre Werte lassen sich mit ic() einfach ausgeben.
- Die Ausgabe wird mit Syntaxhervorhebung dargestellt.
- Optional können Programmkontextinformationen wie Dateiname, Zeilennummer und die übergeordnete Funktion angezeigt werden.
Bevor Sie das Paket nutzen können, müssen Sie es mit folgendem Befehl installieren:
pip install icecream
Eine praktische Eigenschaft von ic() ist, dass es in jeder Datei genutzt werden kann, ohne es explizit in jeder Datei importieren zu müssen, indem es mit install() installiert wird. Die install()-Funktion fügt dem builtins-Modul ic() hinzu. Alle Dateien, die vom Interpreter importiert werden, haben dann Zugriff auf ic().
In Ihrer ersten Root-Python-Datei, z.B. x.py, können Sie ic() mit install() hinzufügen:
from icecream import install install() from y import mult mult()
In der Datei y.py, die x.py importiert, können Sie dann ic() aufrufen:
def mult(): z=8 ic(z)
Die Ausgabe wäre:
y ic| z : 8
Was ic() noch effizienter macht, ist seine Fähigkeit, übergebene Variablen zu untersuchen und ihre Argumente und Werte auszugeben:
from icecream import ic def mult(x): return x * 4 ic(mult(100))
Ausgabe:
ic| mult(100): 400
Zudem können Sie ic() problemlos in bestehenden Code einfügen, da es seine Argumente zurückgibt. Das folgende Beispiel gibt „ic| x: 12“ und dann „ic| y: 48“ aus.
from icecream import ic x = 12 def mult(x): y = mult(ic(x)) ic(y)
Debugging mit dem Py-Spy-Tool
Mit py-spy können Sie Python-Programme profilieren und debuggen. Py-spy visualisiert die Ausführung des Programms, ohne dass das Programm neu gestartet oder der Code geändert werden muss. Da py-spy in Rust geschrieben ist, ist der Overhead gering.
Ein weiterer Vorteil von Py-Spy ist, dass die Verwendung gegen produktiven Python-Code sicher ist, da es als eigenständiger Prozess läuft.
Wie bei den vorherigen Tools muss Py-Spy nach der Installation verwendet werden:
pip install py-spy
Auch wenn Ihr Python-Programm im Produktionseinsatz Datenverkehr verarbeitet, können Sie es mit Py-Spy profilieren und debuggen. Das macht es zu einem wertvollen Werkzeug für Python-Entwickler.
Der Viztracer-Debugger
Alternativ können Sie mit Viztracer die Ausführung Ihres Python-Programms verfolgen und visualisieren. Es ist ein weiteres Profiling-Tool, das mit geringem Overhead arbeitet.
Was macht Viztracer zu einem so effektiven Debugging-Tool?
- Die Verwendung ist unkompliziert und erfordert keine externen Pakete.
- Viztracer läuft auf allen gängigen Betriebssystemen (Windows, Linux, macOS).
- Die leistungsstarke Benutzeroberfläche ermöglicht ein reibungsloses Rendern von Traces auf Gigabyte-Ebene.
- Viztracer verwendet reguläre Ausdrücke (RegEx), um Funktionen und zusätzliche Informationen zu erfassen, wie Variablen und Attribute, ausgelöste Ausnahmen, Garbage-Collector-Operationen, ohne dass Änderungen im Quellcode erforderlich sind.
- Viztracer ist ein Debugging-Tool mit geringem Overhead, da es Daten herausfiltern kann, die nicht für Ihr Programm relevant sind. Zudem behält es vorherige Informationen, bevor das Protokoll im JSON-Format ausgegeben wird.
- Sie können benutzerdefinierte Ereignisse einfügen, wie sofortige Ereignisse, variable Ereignisse und Dauerereignisse. Es funktioniert ähnlich wie ein „Print-Debugging“, nur dass Viztracer Sie wissen lässt, wann die Ausgabe erfolgt, während Sie die Daten verfolgen.
Fazit
Python-Profiling und -Debugging sind entscheidende Schritte im Entwicklungsprozess. Sie helfen dabei, Fehler zu erkennen, die Leistung zu optimieren und somit die Codequalität zu verbessern.
Die oben beschriebenen Debugging-Tools sind effiziente Helfer, die die Arbeit von Python-Entwicklern wesentlich erleichtern.
Da die anderen hier vorgestellten Tools effektiver arbeiten als cProfiler, können Sie Ihren Python-Code wie ein Profi debuggen, potenzielle Fehler beheben und verhindern, dass Ihr Code abstürzt.
Viel Spaß beim Debuggen!