Getestet mit:Raspbian Jessie; Python3
0

Einfuehrung in Debugging und Entwicklung mit der IPython IDE und IPDB

Die IPython IDE ist eine interaktive Entwicklungs- und Debuggingumgebung und eine grosse Hilfe bei der Softwareentwicklung mit Python. Sie ist auch integraler Bestandteil der wunderbaren Jupyter IDE.
Kleine Programme koennen gedebuggt werden durch die Ausgabe von Variablen und das Aufrufen von Funktionen mit Grenzwerten und so weiter. Wenn der Code waechst ist jedoch ein effizienteres Herangehen noetig. IPython hilft ganz hervorragend bei der Introspektion von Code, der schrittweisen Programmausfuehrung, Laufzeitanalyse und mehr. Darueber hinaus koennen automatische Softwaretests entwickelt werden.

IPython Installation
Fuer Python3 und einen Raspberry Pi mit Jessie, gib einfach im Terminal ein

IPython starten
Starte die IPython IDE aus dem Terminal mit

IPython Grundlagen
Die IPython IDE ist der normalen Python IDE aehnlich, trennt aber Ein- und Ausgabezeilen deutlich.

IPython IDE

IPython IDE

IPython unterstuetzt die allseits geliebte Autovervollstaendigung des Terminals. Teste dies durch das Definieren eines Strings und anschliessendem Druecken von Tabulator nach dem Punkt, wodurch alle Methoden und Attribute gezeigt werden (bis auf die mit _ beginnenden):
IPython tab completion

IPython Tabulator-Autovervollstaendigung

Gib %quickref und %magic ein, um die wichtigsten IPython-Kommandos anzuzeigen. Das Einfuegen von ? vor oder nach einem beliebigen Objekt zeigt allgemeine Informationen und den Docstring, so vorhanden, an:
IPython inline help

IPython inline Hilfe

?? anstelle dessen zeigt auch den Quellcode an. Zusammen mit * kann ? nach Objektattributen/-methoden suchen:
IPython object search

IPython Objektsuche

Systemaufrufe koennen mit ! durchgefuehrt werden und ihre Ausgabe kann in eine Variable geschrieben werden:
IPython system commands

IPython Systemaufrufe

Variablen koennen an Systemaufrufe uebergeben werden mit $:
System command parameters

Systemaufruf mit Variablen

Vorherige Ein- und Ausgabezellen koennen mit _iX fuer Eingabezellen und _X fuer Ausgabezellen mit der Zeilennummer X ausgelesen werden.
 Access earlier cells

Zugriff auf vorherige Zellen

Debugging mit ipdb
Bisher hast du ein paar IPython Grundlagen erlernt. Nun wird ein Stueck fehlerhafter Code mit dem IPython Debugger ipdb untersucht:

Lade das Demoscript herunter mit

Aktiviere dann automatisches Debugging mit

und fuehre das Script aus durch die Eingabe von

Eine andere Moeglichkeit fuer den Start von ipdb ist innerhalb des Scripts, in dem die zwei Zeilen

ueberhalb der Zeile

in buggy_script.py eingefuegt werden, um dann das Script zu starten durch den Terminalbefehl

Beide Wege aktivieren den Debugger und zeigen den Stacktrace:

IPython stack trace

IPython Stacktrace

Der Stacktrace zeigt den Pfad der Exception von dem Modul aus, das den Fehler erkannt bis runter zu der Zeile Code, die den Fehler verursacht hat. ipdb> ist die pdb Befehlszeile. Wird nur ? eingegeben, werden die verfuegbaren pdb Befehle angezeigt. Du kannst das Programm schrittweise ausfuehren mit s, die Argumente der aktiven Funktion mit a anzeigen, Variablen ausgeben, Funktionen mit Grenzwerten aufrufen ect..
IPython debugger

IPython Debugger

Aha! calculate hatte 1 fuer a und 0 fuer b als Argumente, wodurch zurecht abgebrochen wird, da durch 0 geteilt wird.

Links
Test-driven Projektaufbau: http://www.knight-of-pi.org/de/python-projekt-test_driven_development/
Jupyter Installation: http://www.knight-of-pi.org/de/installation-von-jupyter-auf-einem-raspberry-pi-fuerr-notebooks-debugging-und-datenanalyse/
IPython Website: https://ipython.org/

Knight of Pi

Johannes Bergs aka Knight of Pi. Diploma in Bioinformatics, some Webdesign and Python coding then. Living in the beautiful city of Vienna.

Kommentar

Time limit is exhausted. Please reload CAPTCHA.