Zum Inhalt

VS Code und Python

Debugging

Das komfortable Debuggen von programmiertem Code ist eine zentrale Funktion einer Entwicklungsumgebung. Daher ist die Unterstützung sehr wichtig! VS Code unterstützt dies für sehr viele Programmiersprachen. Dies soll mit Python demonstriert werden.

Ist ein Python-Skript erzeugt, dann soll es untersucht (debugged) werden. Dazu dient folgendes Beispiel:

deb_1.py

data = { "name":"vari","val":123}

def func(a):
    erg = a*234
    return erg


def main():
    v1 = 23.32
    v2 = 0.001
    s1 = func(v1)
    s2 = func(v1+v2)
    print(f'erg1 = {s1}s,   erg2={s2}mm')


if __name__ == "__main__":
    main()
Download: File

Starten des Debug-Vorgangs:

Start

Da das Programm immer wieder im Debug-Modus untersucht werden muss, sollte unbedingt eine Debug-Einstallung launch.json angelegt werden:

init

Auswahl der Debuggers (1)

init2

Auswahl der Debuggers (1)

init3

Automatisch generierte ./.vscode/launch.json Datei

init4

Die generierte lauch.jsonkann jederzeit geändert oder erweitert werden:

lauch.json
{
    // Verwendet IntelliSense zum Ermitteln möglicher Attribute.
    // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
    // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python-Debugger: Aktuelle Datei",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

Eine Erweiterung kann die Konfiguration "MainApp" sein, in der die aktuelle Version eines Hauptprogramms gesetzt wird. So muss nicht zwingend das auszuführende py-Skript im Editor geladen sein ("aktuelle Datei"):

lauch.json
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "mainApp mit Args",
            "type": "debugpy",
            "request": "launch",
            "program": "deb_1.py", // (1)
            "console": "integratedTerminal",
            "args": ["--port", "1890"] // (2)
        },
        {
            "name": "Python-Debugger: Aktuelle Datei",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

  1. mainApp
  2. Argumente, die in der mainApp ausgewertet werden können

Debug-Lauf

Um ein Skript untersuchen zu können, müssen sogenannte "Breakpoints" vorhanden sein. Diese lassen sich im Editor durch Klick in der linken Spalte anlegen und werden mit einem roten Punkt gekennzeichnet:

Breakpoints

Angehaltenes Skript mit Variableninhalten:

Braek_Deb

Eine interaktive Untersuchung von Daten - auch mittels Skripting - kann mit der Debugkonsole gestartet werden:

Deb_Console

Jupyter-Notebook

Eine noch stärker interaktiv ausgeprägte Vorgehensweise bei der Entwicklung von Skripten kann mit dem Jupyter-Notebook realisiert werden. Diese Variante findet zwei Realisierungen:

a. Webserverbasiert (JupyterLab) b. VS Code - integriert (Jupyter)

Wenn VS Code eh genutzt wird, dann bietet sich diese Variante direkt an. Der Start ist denkbar einfach: Erzeuge eine neue Datei mit der Endung ipynb (interactive python notebook). Beim ersten Mal erkennt VSC den neuen Dateityp und installiert die Jupyter-Umgebung für den aktive Python-Interpreter. Danach erscheint ein Block-orientierter Editor, die in Code-Bereich und optionalen "Markdown-"Bereich untergliedert ist:

Beispiel

ipynb_1

Die nachfolgende Grafik zeigt das komplette Beispiel. Dabei werden der Reihe nach die einzelnen Blöcke ausgeführt und der letzte Block zeigt die Konsolenausgabe mit print():

ipynb_2

Die weitere Vorgehensweise zeigt die Flexibilität und Freiheit von Jupyter-NB:

  • Blöcke lassen sich in beliebiger Reihenfolge (auch geändert!) wieder ausführen
  • Neue Blöcke (Code, Markdown) lassen überall einfügen, verschieben oder löschen.
  • Dokumentation mit der Markdown-Syntax ( Link)

Plotausgabe:

Um im Notebook direkt Plotausgaben anzeigen zu können, braucht es die Installation einer VSC-Toolbox: Jupyter-Render:

ipynb_1

Remote-Entwicklung

Bisher wurden die Python-Programme lokal auf dem Rechner ausgeführt, auf dem auch mit VSC programmiert wurde. In der IoT ist es i.d.R. so, dass die Server bzw. Gateway's mit einem Netzwerk verbunden dezentral arbeiten. Für die Remote-Arbeit (auch über das Internet) müssen gesicherte Verbindungen aufgebaut werden, um mit den verschiedenen Werkzeugen auf dem Zielsystem aus der Ferne (=Remote) arbeiten zu können.

Info - Installation

In VSC muss die Erweiterung "Remote - SSH" installiert sein.

Link Packet Beschreibung
remote Remote - SSH Mit Remote - SSH kann jede entfernte Rechner mit einem SSH-Server als Entwicklungsumgebung genutzt. Dies kann die Entwicklung und Fehlersuche in einer Vielzahl von Situationen erheblich vereinfachen. Anmwendung sind die Entwicklung mit Servern, die auf Linux aufsetzen (z.B. Raspberry Pi, ..)

Test-Umgebung

Um die nachfolgenden Schritte testen zu können, braucht es ein Remote-System. Dies können sein:

  • virtuelle Systeme Kapitel
    • VirtualBox-Linux
    • HyperV-Linux
  • RaspberryPi
  • ...

SSH-Remote-Verbindung

Um eine SSH-Remote-Verbindung mit einem Server herstellen zu können, muss auf dem Server ein SSH-Server installiert sein. In der Regel werden heute (Windows, Linux) "OpenSSH-Server" eingesetzt. Für eine Verbindung werden benötigt:

  • IP-Adresse
  • Benutzer
  • Passwort

Ist die VSC-Remote-Erweiterung installiert, dann erscheint in der linken unteren Ecke des VSC folgendes Icon:

ssh_f

Starten:

ssh_1

neuen SSH-Host...

ssh_2

Verbindung als <user>@<ip>:

ssh_2

Verbindung speichern:

ssh_c

Nach erfolgreicher Verbindung: Ordner wählen

ssh_c1

Anmeldung (ist bei jeder neuen Verbindung bzw. Ordner-Wechsel erforderlich):

ssh_c2

Wird erstmalig ein Python-Skript zum Debuggen ausgewählt, dann muss die passende Umgebung auf dem Zielsystem installiert werden. Dies initiiert man gemäß folgender Grafik:

ssh_d

Dei erste Erweiterung installiert automatisch die zweite Erweiterung:

ssh_d

Alle weiteren Schritte entsprechen dem lokalen Arbeiten bei der Python-Programmierung.

Info

  • Das Terminal ist ein SSH-Terminal, mit dem alle weiteren administrativen Aufgaben auf dem Zielsystemn ausgeführt werden können.
  • Zur Vorbereitung einer Python-Projektumgebung empfiehlt sich die Nutzung von UV !!! Kapitel