Debuggen Sie Python wie ein Held mit diesen Bibliotheken und Tools

Möchten Sie ein echter Python-Debugging-Experte sein? Debuggen Sie Ihren Python-Code mit diesen erstaunlichen Python-Debugging-Tools und -Bibliotheken, die wir bald behandeln werden!

Python ist eine allgemeine, objektorientierte Programmiersprache auf hoher Ebene, die für viele Entwicklungszwecke verwendet wird. Darüber hinaus ist es ein effektives Entwicklungstool für verschiedene Anwendungen, von der Entwicklung von Webanwendungen über Web Scraping bis hin zu komplexeren Anwendungen wie maschinellem Lernen und Data Science.

Während der Entwicklung treten häufig Fehler auf, die als Bugs in der Programmierung bezeichnet werden. Entwickler unternehmen mehrere Schritte, um die vorhandenen und potenziellen Fehler im Code zu erkennen und zu beseitigen. Dadurch verhindern Sie, dass der Programmcode zerquetscht wird. Wir nennen diesen Prozess Debugging.

Dieser Artikel befasst sich mit mehreren verfügbaren Python-Debuggern, die Sie verwenden können. Wir werden auch sehen, wie sich diese Debugger voneinander unterscheiden und was ihre Implementierung effektiv macht.

cProfiler-Debugging-Bibliothek

cProfiler, ist eine beliebte Bibliothek und eine C-Erweiterung, die die Profilerstellung von lange laufendem Code ausführt. Auf lange Sicht identifiziert es Abschnitte des Programmcodes, deren Ausführung lange dauert. Obwohl es die genaue Zeit identifiziert, die benötigt wird, um verschiedene Abschnitte des Codes auszuführen, werden Fehler im Code nicht vollständig identifiziert oder behoben.

Daher entsteht die Notwendigkeit, andere Debugger zu verwenden.

Glücklicherweise können Sie stattdessen empfohlene Bibliotheken wie ipdb, Django-debug-toolbar, pyelftools, viztracer und py-spy als Debugging-Tools für Ihren Python-Code verwenden.

Das ipdb-Debugging-Tool

Der vollständige IPython-fähige Python-Debugger ist ein interaktiver Debugger von Drittanbietern, der Folgendes enthält pdb’s Funktionalität. IPBD kommt auch mit interaktiver Shell-IPython-Unterstützung. Diese Unterstützung umfasst neben anderen Supportfunktionen die Vervollständigung von Tabulatoren, Farbunterstützung und magische Funktionen.

Dieser Debugger ermöglicht den Zugriff auf den IPython-Debugger, indem relevante Funktionen exportiert werden. Es bietet auch eine ähnliche Schnittstelle für eine bessere Selbstbeobachtung, genau wie im pdb-Modul.

Debuggen mit Ipdb

Die Bibliothek muss mit dem folgenden Pip-Befehl installiert werden.

pip install ipdb

Ein Beispiel für die Verwendung von ipdb würde wie folgt aussehen:

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

def nested_loop():
    for 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 meiner Datei ist:

python -m ipdb test.py

Der ipdb-Import und das Ausführen der Funktion ipdb.set_trace() ermöglicht den Beginn des Programms und führt den Debugger durch die Ausführung.

  So komprimieren und entpacken Sie Dateien und Ordner auf dem Mac

Die Funktion ipdb.pm() (post-mortem) verhält sich ähnlich wie die magische Funktion %debug.

set_trace-Argumente

Übergeben Sie den Kontext als Argument an set_trace, um mehrere definierte Codezeilen anzuzeigen. Darüber hinaus akzeptiert cond, das set_trace auch als Argument akzeptiert, boolesche Werte und startet die ipdb-Schnittstelle, wenn Sie cond auf true setzen.

Konfigurationsdatei verwenden

Legen Sie das Kontextargument mit einer idpdb-Datei oder der setup.cfg-Datei fest, die im Home- bzw. Projektordner verfügbar ist. Sie können die Funktionalität von ipdb gerne weiter überprüfen.

Django Debug-Symbolleiste

Das Django-Debug-Symbolleiste ist ein beliebtes Debugging-Tool in Django: einem Python-Framework.

Dieser konfigurierbare Satz von Fenstern zeigt die Debug-Informationen einer aktuellen Anfrage oder Antwort an. Wenn Sie auf die Symbolleiste klicken, werden weitere Details zum Inhalt des Bereichs angezeigt.

Dieses Tool untersucht die Django-Entwicklungsumgebung gründlich.

Folgen Sie dem Installationsprozess und den Konfigurationsanweisungen hier.

Pyelftools-Bibliothek

Das pyelftools Die Bibliothek basiert ausschließlich auf Python. Es parst und analysiert ELF-Dateien und DWARF-Debugging-Informationen und erfordert nur die Ausführung von Python.

Die Verwendung von Pyelftools ist einfach, da es keine externen Bibliotheken hat. Darüber hinaus ist die Verwendung von pyelftools ohne Installation ziemlich einfach, da lediglich PYTHONPATH in den Umgebungsvariablen angepasst werden muss.

Sie installieren es mit:

pip install pyelftools 

Die Implementierung von pyelftools erfordert lediglich den Import und den Aufruf in Ihrem Programm.

Das icecream 🍦 Debugging-Tool

Dies ist ein weiteres effizientes Debugging-Tool für Python-Entwickler.

  Raid 0 vs. Raid 1: Unterschiede und Ähnlichkeiten

Verwenden Eisauch ic(), hat viele Vorteile gegenüber print(), wie unten beschrieben:

  • Das Tippen ist buchstäblich relativ schneller.
  • Es druckt Datenstrukturen ziemlich gut.
  • Ausdrücke oder Variablennamen und ihre Werte mit ic() ausgeben.
  • Es hebt die Syntax der Ausgabe hervor.
  • Optional enthält es den Programmkontext, einschließlich des Dateinamens, der Zeilennummer und der übergeordneten Funktion.

Bevor Sie dieses Paket verwenden, installieren Sie es mit dem folgenden Pip-Befehl:

pip install icecream

Das Gute ist, dass Sie ic() in allen Dateien verwenden können, ohne es unbedingt in alle Dateien importieren zu müssen, indem Sie es mit install() installieren. Außerdem fügt install() dem builtins-Modul ic() hinzu. Alle Dateien, die der Interpreter importiert, teilen ic().

Fügen Sie in Ihrer ersten Root-Python-Datei, die Sie x.py nennen können, ic() mit install() hinzu.

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

In y.py fil wird die x.py-Datei importiert, ic() aufrufen

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

Ergebnisse:

y
ic| z : 8

Was ic() effizienter macht, ist seine Fähigkeit, ihm übergebene Variablen, einschließlich sich selbst, zu untersuchen und dann seine Argumente und die Argumentwerte wie im folgenden Beispiel auszugeben.

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

Ausgabe:

ic| mult(100): 400

Darüber hinaus können Sie ic() in bereits vorhandenen Code einfügen, da es seine Argumente zurückgibt. Das folgende Beispiel gibt ic| zurück x: 12, dann ic| j: 48.

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

Debuggen mit dem Py-Spy-Tool

Sie können verwenden Spionage um Beispiele für Python-Programme als Debugging-Tool zu profilieren. Ohne das Programm neu zu starten oder seinen Code zu ändern, visualisiert py-spy die Ausführung des Python-Programms. Da es in Rust geschrieben ist, hat es außerdem einen geringen Overhead.

Darüber hinaus ist zu bedenken, dass die Verwendung von Py-Spy gegen Produktions-Python-Code sicher ist, da es einen anderen Prozess als das profilierte Python-Programm ausführt.

  So verwenden Sie einen echten GameCube-Controller oder eine Wiimote in Dolphin

Wie jedes andere vorhergehende Tool, das wir gesehen haben, können Sie das Py-Spy-Tool nach der Installation verwenden.

pip install py-spy 

Obwohl Ihr Python-Programm Produktionsdatenverkehr bedient, können Sie dieses Programm immer noch mit Py-Spy profilieren und debuggen, was es zu einem wichtigen Python-Profiler-Tool macht.

Viztracer-Debugger

Alternativ können Sie viztracer, ein Debugging-Tool, verwenden, um die Ausführung Ihres Python-Programms zu verfolgen und zu visualisieren. Es ist auch ein Profiling-Tool mit Low-Overhead-Protokollierung.

Was macht Viztracer ein effektives Debugging-Tool?

  • Die Verwendung ist ziemlich einfach und hängt nicht von externen Paketen ab, um zu funktionieren.
  • Viztracer läuft auf allen Betriebssystemplattformen: Windows, Linux oder macOS.
  • Sein leistungsstarkes Front-End rendert reibungslos Trace auf GB-Ebene.
  • Es verwendet RegEx, um beliebige Funktionen und zusätzliche Informationen wie z Variablen und Attribute, Erhöhte Ausnahmen, Garbage Collector-Operationenusw., ohne einen Codeabschnitt in Ihrem Quellcode zu ändern.
  • Was viztracer zu einem Low-Overhead-Debugging-Tool macht, ist seine Fähigkeit, Daten herauszufiltern, die Sie in Ihrem Programm nicht benötigen. Es behält dann alte Informationen bei, bevor das Protokoll im JSON-Format ausgegeben wird.
  • Sie können es verwenden, um benutzerdefinierte Ereignisse wie das einzufügen sofortiges Ereignisdas Variables Ereignisund die Dauerereignis während das Programm läuft. Auf diese Weise funktioniert es wie ein Druck-Debug, außer dass viztracer Sie wissen lässt, wann der Druck auftritt, während Sie Daten verfolgen.

Fazit

Python-Profiling und -Debugging sind ebenso wie Software-Profiling ein wichtiger Schritt in einer Entwicklung, die Aufmerksamkeit erfordert. Dieser Schritt hilft dabei, Codeabschnitte mit Fehlern auszuschließen, sodass die Gesamtleistung des Codes optimiert wird.

Die oben behandelten Debugging-Tools sind effiziente Tools, die die Arbeit eines Python-Entwicklers ziemlich einfach machen.

Da die anderen Debugging-Tools effektiver arbeiten als der cProfiler, können Sie wie ein echter Held Ihren Python-Code debuggen und potenzielle Fehler mit diesen Debuggern beheben, um zu verhindern, dass Ihr Code ohne Absturz ausgeführt wird.

Viel Spaß beim Debuggen!