Verwenden von Visual Studio Code zum Entwickeln und Debuggen von Modulen für Azure IoT Edge

Gilt für: Symbol „Ja“ IoT Edge 1.1 Symbol „Ja“ IoT Edge 1.2

Sie können Ihre Geschäftslogik in Azure IoT Edge-Module umwandeln. In diesem Artikel wird veranschaulicht, wie Sie Visual Studio Code als wichtigstes Tool zum Entwickeln und Debuggen von Modulen verwenden.

Es gibt zwei Möglichkeiten zum Debuggen von Modulen, die in C#, Node.js oder Java geschrieben wurden, in Visual Studio Code: Sie können entweder einen Prozess in einem Modulcontainer anfügen oder den Modulcode im Debugmodus starten. Zum Debuggen von Modulen, die in Python oder C geschrieben wurden, können Sie nur einen Prozess in Linux-amd64-Containern anfügen.

Wenn Sie mit den Debugfunktionen von Visual Studio Code nicht vertraut sind, informieren Sie sich über Debuggen.

Dieser Artikel enthält Anweisungen zum Entwickeln und Debuggen von Modulen in mehreren Sprachen für mehrere Architekturen. Derzeit bietet Visual Studio Code Unterstützung für Module, die in C#, C, Python, Node.js und Java geschrieben wurden. Die unterstützten Gerätearchitekturen sind X64 und ARM32. Weitere Informationen zu unterstützten Betriebssystemen, Sprachen und Architekturen finden Sie unter Sprach- und Architekturunterstützung.

Hinweis

Die Unterstützung für das Entwickeln und Debuggen von Linux-ARM64-Geräten befindet sich in der öffentlichen Vorschau. Weitere Informationen finden Sie unter Develop and debug ARM64 IoT Edge modules in Visual Studio Code (preview) (Entwickeln und Debuggen von ARM64 IoT Edge-Modulen in Visual Studio Code (Vorschauversion)).

Voraussetzungen

Sie können einen Computer oder virtuellen Computer unter Windows, macOS oder Linux als Entwicklungscomputer verwenden. Auf Windows-Computern können Sie entweder Windows- oder Linux-Module entwickeln. Verwenden Sie zum Entwickeln von Windows-Modulen einen Windows-Computer, auf dem die Version 1809/Build 17763 oder höher ausgeführt wird. Verwenden Sie zum Entwickeln von Linux-Modulen einen Windows-Computer, der die Anforderungen für Docker Desktop erfüllt.

Installieren Sie zuerst Visual Studio Code, und fügen Sie dann die folgenden Erweiterungen hinzu:

Ferner müssen Sie einige zusätzliche, sprachspezifische Tools installieren, um Ihr Modul zu entwickeln:

Um Ihr Modulimage zu erstellen und bereitzustellen, müssen Sie Docker das Modulimage erstellen lassen und benötigen eine Containerregistrierung, die das Modulimage aufnimmt:

Sofern Sie Ihr Modul nicht in C entwickeln, benötigen Sie außerdem das Python-basierte Azure IoT EdgeHub Dev Tool, um Ihre lokale Entwicklungsumgebung für das Debuggen, Ausführen und Testen Ihrer IoT Edge-Lösung einzurichten. Wenn dies noch nicht erfolgt ist, installieren Sie Python (2.7/3.6/3.7/3.8) und Pip, und installieren Sie anschließend iotedgehubdev, indem Sie diesen Befehl in Ihrem Terminal ausführen.

pip install --upgrade iotedgehubdev

Hinweis

Wenn Sie über mehrere Versionen von Python verfügen, einschließlich Python 2.7 (z. B. für Ubuntu oder macOS), sollten Sie sicherstellen, dass Sie das richtige pip- oder pip3-Programm zum Installieren von iotedgehubdev verwenden.

Zum Testen Ihres Moduls auf einem Gerät benötigen Sie einen aktiven IoT Hub mit mindestens einem IoT Edge-Gerät. Um Ihren Computer als IoT Edge-Gerät zu verwenden, führen Sie die Schritte in der Schnellstartanleitung für Linux oder Windows aus. Wenn Sie IoT Edge-Daemon auf Ihrem Entwicklungscomputer ausführen, müssen Sie möglicherweise EdgeHub und EdgeAgent beenden, bevor Sie mit nächsten Schritt fortfahren.

Erstellen einer neuen Lösungsvorlage

Die folgenden Schritte veranschaulichen, wie Sie ein IoT Edge-Modul in Ihrer bevorzugten Entwicklungssprache (einschließlich des in C# geschriebenen Azure Functions) mithilfe von Visual Studio Code und der Azure IoT-Tools erstellen. Als Erstes erstellen Sie eine Projektmappe, dann generieren Sie das erste Modul in dieser Projektmappe. Jede Projektmappe kann mehrere Module enthalten.

  1. Wählen Sie Ansicht > Befehlspalette aus.

  2. Geben Sie in der Befehlspalette den folgenden Befehl ein, und führen Sie ihn aus: Azure IoT Edge: Neue IoT Edge-Projektmappe ein.

    Ausführen einer neuen IoT Edge-Projektmappe

  3. Navigieren Sie zu dem Ordner, in dem Sie die neue Projektmappe erstellen möchten, und wählen Sie dann Ordner auswählen aus.

  4. Geben Sie einen Namen für die Lösung ein.

  5. Wählen Sie als erstes Modul in der Projektmappe eine Modulvorlage für Ihre bevorzugte Entwicklungssprache aus.

  6. Geben Sie einen Namen für Ihr Modul ein. Wählen Sie einen Namen, der in der Containerregistrierung eindeutig ist.

  7. Geben Sie den Namen des Imagerepositorys des Moduls an. Visual Studio Code füllt den Modulnamen automatisch mit localhost:5000/<Name Ihres Moduls> auf. Ersetzen Sie ihn durch Ihre eigenen Registrierungsinformationen. Wenn Sie eine lokale Docker-Registrierung zum Testen verwenden, können Sie localhost nutzen. Nutzen Sie den Anmeldeserver aus Ihren Registrierungseinstellungen, wenn Sie Azure Container Registry verwenden. Der Anmeldeserver hat das Format <registry name> .azurecr.io. Ersetzen Sie nur den Teil localhost:5000 der Zeichenfolge, damit das endgültige Ergebnis folgendes Format aufweist: <registry name>.azurecr.io/ <your module name>.

    Bereitstellen eines Docker-Imagerepositorys

Visual Studio Code verwendet die angegebenen Informationen, erstellt eine IoT Edge-Projektmappe, und lädt diese in einem neuen Fenster.

Es gibt vier Elemente in der Projektmappe:

  • Einen Ordner .vscode, der Debugkonfigurationen enthält.

  • Einen Ordner modules, der Unterordner für jedes Modul enthält. Innerhalb der Ordner für die einzelnen Module befindet sich eine Datei namens module.json, die die Erstellung und Bereitstellung der Module steuert. Diese Datei müsste bearbeitet werden, um die Containerregistrierung für die Modulbereitstellung von „localhost“ in eine Remoteregistrierung zu ändern. Zu diesem Zeitpunkt verfügen Sie über nur ein Modul. Sie können aber über die Befehlspalette weitere hinzufügen. Verwenden Sie dazu den Befehl Azure IoT Edge: Add IoT Edge Module (Azure IoT Edge: IoT Edge-Modul hinzufügen) aus.

  • Eine .env-Datei, in der Ihre Umgebungsvariablen aufgeführt werden. Wenn Azure Container Registry Ihre Registrierung ist, enthält sie einen Azure Container Registry-Benutzernamen und ein Kennwort.

    In Produktionsszenarien empfehlen wir die Verwendung von Dienstprinzipalen, um Zugriff auf Ihre Containerregistrierung statt der ENV-Datei zu ermöglichen. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf Ihre Containerregistrierung.

    Hinweis

    Die Umgebungsdatei wird nur erstellt, wenn Sie ein Imagerepository für das Modul angeben. Wenn Sie die „localhost“-Standardeinstellungen zum lokalen Testen und Debuggen akzeptiert haben, müssen Sie keine Umgebungsvariablen deklarieren.

  • Eine Datei deployment.template.json, in der Ihr neues Modul zusammen mit dem Beispielmodul SimulatedTemperatureSensor, mit dem Daten zum Testen simuliert werden, aufgeführt ist. Weitere Informationen zur Funktionsweise von Bereitstellungsmanifesten finden Sie unter Bereitstellen von Modulen und Einrichten von Routen mithilfe von Bereitstellungsmanifesten.

Der Quellcode „SimulatedTemperatureSensor.csproj“ veranschaulicht die Funktionsweise des Moduls für simulierte Temperatur.

Festlegen der IoT Edge-Runtimeversion

Die IoT Edge-Erweiterung verwendet beim Erstellen Ihrer Bereitstellungsressourcen standardmäßig die neueste stabile Version der IoT Edge-Runtime. Zurzeit ist Version 1.2 die neueste stabile Version. Wenn Sie Module für Geräte entwickeln, auf denen die Version 1.1 mit langfristigem Support (Long-Term Support, LTS) oder die frühere Version 1.0 ausgeführt wird, aktualisieren Sie die IoT Edge-Runtimeversion in Visual Studio Code entsprechend.

  1. Wählen Sie Ansicht > Befehlspalette aus.

  2. Geben Sie in der Befehlspalette den Befehl Azure IoT Edge: Set default IoT Edge runtime version (Azure IoT Edge: IoT Edge-Runtime-Standardversion festlegen) ein, und führen Sie ihn aus.

  3. Wählen Sie in der Liste die Runtimeversion aus, die auf Ihren IoT Edge-Geräten ausgeführt wird.

Nachdem Sie eine neue Runtimeversion ausgewählt haben, wird Ihr Bereitstellungsmanifest dynamisch aktualisiert, um die Änderung an den Runtimemodulimages widerzuspiegeln.

Hinzufügen zusätzlicher Module

Um Ihrer Projektmappe zusätzliche Module hinzuzufügen, führen Sie den Befehl Azure IoT Edge: IoT Edge-Modul hinzufügen aus der Befehlspalette aus. Sie können aber auch mit der rechten Maustaste auf den Ordner Module oder auf die deployment.template.json-Datei in der Exploreransicht von Visual Studio Code klicken und dann Zu IoT Edge-Module hinzufügen auswählen.

Entwickeln Ihres Moduls

Der Modulstandardcode, der zum Lieferumfang der Projektmappe gehört, befindet sich an diesem Speicherort:

  • Azure Function (C#): Module > <Name Ihres Moduls> > <Name Ihres Moduls> .cs
  • C#: Module > <Name Ihres Moduls> > Program.cs
  • Python: Module > <Name Ihres Moduls> > main.py
  • Node.js: Module > <Name Ihres Moduls> > app.js
  • Java: Module > <Name Ihres Moduls> > src > main > java > com > edgemodulemodules > App.java
  • C: Module > <Name Ihres Moduls> > main.c

Das Modul und die Datei „deployment.template.json“ werden so eingerichtet, dass Sie die Projektmappe erstellen, in Ihre Containerregistrierung verschieben und zum Starten des Tests für ein Gerät bereitstellen können, ohne Code ändern zu müssen. Das Modul ist so konzipiert, dass es einfach eine Eingabe aus einer Quelle akzeptiert (in diesem Fall das Daten simulierende „SimulatedTemperatureSensor“-Modul) und an den IoT Hub sendet.

Wenn Sie bereit sind, die Vorlage mit Ihrem eigenen Code anzupassen, erstellen Sie mit den Azure IoT Hub SDKs Module, die die wesentlichen Anforderungen für IoT-Lösungen wie Sicherheit, Geräteverwaltung und Zuverlässigkeit berücksichtigen.

Debuggen eines Moduls ohne einen Container (C#, Node.js, Java)

Wenn Sie in C#, Node.js oder Java entwickeln, ist für Ihr Modul die Verwendung eines ModuleClient-Objekts im Standardcode des Moduls erforderlich, damit es gestartet und ausgeführt werden und Nachrichten weiterleiten kann. Sie verwenden außerdem den Standardeingabekanal input1 für Aktionen, wenn das Modul Nachrichten empfängt.

Einrichten des IoT Edge-Simulators

IoT Edge-Module benötigen eine IoT Edge-Umgebung zum Ausführen und Debuggen. Sie können auf Ihrem Entwicklungscomputer einen IoT Edge-Simulator verwenden, statt den vollständigen IoT Edge-Sicherheitsdaemon und die IoT Edge-Runtime auszuführen. Sie können entweder ein Gerät simulieren, um Lösungen mit mehreren Modulen zu debuggen, oder eine einzelne Modulanwendung simulieren.

Option 1: Simulieren einer IoT Edge-Lösung:

  1. Erweitern Sie in der Registerkarte Explorer auf der linken Seite den Abschnitt Azure IoT Hub. Klicken Sie mit der rechten Maustaste auf Ihre IoT Edge-Geräte-ID, und wählen Sie dann IoT Edge Simulator einrichten aus, um den Simulator ohne die Geräteverbindungszeichenfolge zu starten.
  2. Sie können sehen, dass der IoT Edge-Simulator erfolgreich eingerichtet wurde, indem Sie die Verlaufsdetails im integrierten Terminal lesen.

Option 2: Simulieren eines einzelnen IoT Edge-Moduls:

  1. Führen Sie in der Visual Studio Code-Befehlspalette den Befehl Azure IoT Edge: Edge Hub-Simulator für Einzelmodul starten aus.

  2. Geben Sie die Namen aller Eingaben an, die Sie mit Ihrem Modul testen möchten. Wenn Sie den Standardbeispielcode verwenden, geben Sie den Wert input1 an.

  3. Der Befehl öffnet das iotedgehubdev-CLI und startet anschließend den IoT Edge-Simulator und einen Modulcontainer eines Testhilfsprogramms. Die Ausgaben werden unten im integrierten Terminal angezeigt, wenn der Simulator im Einzelmodulmodus erfolgreich gestartet wurde. Angezeigt wird auch ein curl-Befehl, über den das Senden von Nachrichten erfolgen kann. Er wird später noch benötigt.

    Einrichten des IoT Edge-Simulators für die Einzelmodul-App

    Sie können die Docker Explorer-Ansicht in Visual Studio Code verwenden, um den Ausführungsstatus des Moduls zu sehen.

    Modulstatus im Simulator

    Der EdgeHubDev-Container ist das Kernstück des lokalen IoT Edge-Simulators. Er kann auf dem Entwicklungscomputer ohne IoT Edge-Sicherheits-Daemon ausgeführt werden und stellt Umgebungseinstellungen für Ihre native Modul-App oder Modulcontainer bereit. Der input-Container macht REST APIs verfügbar, um die Übermittlung von Nachrichten an den Zieleingabekanal Ihres Moduls zu unterstützen.

Modul im Startmodus debuggen

Nachdem der Simulator erfolgreich gestartet wurde, können Sie Ihren Modulcode debuggen.

  1. Bereiten Sie Ihre Umgebung entsprechend den Anforderungen Ihrer Entwicklungssprache für das Debuggen vor, legen Sie einen Haltepunkt in Ihrem Modul fest, und wählen Sie die zu verwendende Debugkonfiguration aus:

    • C#

      • Führen Sie im integrierten Terminal von Visual Studio Code einen Verzeichniswechsel zum Ordner <Name Ihres Moduls> durch, und führen Sie dann den folgenden Befehl aus, um die .NET Core-Anwendung zu erstellen.

        dotnet build
        
      • Öffnen Sie die Datei Program.cs, und fügen Sie einen Haltepunkt hinzu.

      • Navigieren Sie zur Visual Studio Code-Debugansicht, indem Sie im Menü auf der linken Seite das Debugsymbol auswählen oder Ctrl+Shift+D eingeben. Wählen Sie in der Dropdownliste die Debugkonfiguration <Name Ihres Moduls> Local Debug (.NET Core) aus.

        Hinweis

        Wenn Ihr .NET Core-TargetFramework nicht mit Ihrem Programmpfad in launch.json übereinstimmt, müssen Sie den Programmpfad in launch.json manuell aktualisieren, damit er zum TargetFramework in Ihrer CSPROJ-Datei passt, so dass Visual Studio Code dieses Programm erfolgreich starten kann.

    • Node.js

      • Führen Sie im integrierten Terminal von Visual Studio Code einen Verzeichniswechsel zum Ordner <Name Ihres Moduls> durch, und führen Sie dann den folgenden Befehl aus, um Node-Pakete zu installieren.

        npm install
        
      • Öffnen Sie die Datei app.js, und fügen Sie einen Haltepunkt hinzu.

      • Navigieren Sie zur Visual Studio Code-Debugansicht, indem Sie im Menü auf der linken Seite das Debugsymbol auswählen oder Ctrl+Shift+D eingeben. Wählen Sie aus der Dropdownliste die Debugkonfiguration <Name Ihres Moduls> Local Debug (Node.js) aus.

    • Java

      • Öffnen Sie die Datei App.java, und fügen Sie einen Haltepunkt hinzu.

      • Navigieren Sie zur Visual Studio Code-Debugansicht, indem Sie im Menü auf der linken Seite das Debugsymbol auswählen oder Ctrl+Shift+D eingeben. Wählen Sie aus der Dropdownliste die Debugkonfiguration <Name Ihres Moduls> Local Debug (Java) aus.

  2. Klicken Sie auf Debuggen starten, oder drücken Sie F5, um die Debugsitzung zu starten.

  3. Führen Sie im integrierten Visual Studio Code-Terminal den folgenden Befehl aus, um die Nachricht Hallo Welt an Ihr Modul zu senden. Dies ist der Befehl, der in vorherigen Schritten gezeigt wurde, wenn der IoT Edge-Simulator installiert wurde.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    Hinweis

    Wenn Sie Windows verwenden, achten Sie darauf, dass die Shell Ihres integrierten Terminals von Visual Studio Code Git Bash oder WSL Bash ist. Den curl-Befehl können Sie nicht aus einer PowerShell oder Eingabeaufforderung ausführen.

    Tipp

    Sie können auch PostMan oder andere API-Tools (anstelle von curl) zum Senden von Nachrichten verwenden.

  4. In der Visual Studio Code-Debugansicht werden die Variablen im linken Bereich angezeigt.

  5. Um Ihre Debugsitzung zu beenden, wählen Sie die Schaltfläche „Stopp“ aus, oder drücken Sie UMSCHALT + F5, und führen Sie dann Azure IoT Edge: IoT Edge-Simulator beenden in der Befehlspalette aus, um den Simulator zu beenden und zu bereinigen.

Debuggen im Anfügemodus mit IoT Edge Simulator (C#, Node.js, Java, Azure Functions)

Ihre Standardprojektmappe enthält zwei Module: ein Modul mit simuliertem Temperatursensor und ein Pipemodul. Der simulierte Temperatursensor sendet Nachrichten an das Pipemodul; anschließend werden die Nachrichten an den IoT Hub geleitet. In dem von Ihnen erstellten Modulordner gibt es mehrere Docker-Dateien für unterschiedliche Containertypen. Verwenden Sie eine der Dateien mit der Erweiterung .debug, um Ihr Modul zum Testen zu erstellen.

Aktuell wird Debuggen im Anfügemodus nur in folgender Weise unterstützt:

  • C#-Module, einschließlich der für Azure Functions, unterstützen das Debuggen in Linux-amd64-Containern
  • Node.js-Module unterstützen das Debuggen in Linux-amd64- und -arm32v7-Containern und in Windows-amd64-Containern
  • Java-Module unterstützen das Debuggen in Linux-amd64- und -arm32v7-Containern

Tipp

Sie können zwischen den Optionen für die Standardplattform für ihre IoT Edge-Projektmappe umschalten, indem Sie in der Visual Studio Code-Statusleiste auf das Element klicken.

Einrichten des IoT Edge-Simulators für eine IoT Edge-Projektmappe

Auf dem Entwicklungscomputer brauchen Sie zum Ausführen der IoT Edge-Projektmappe nicht den IoT Edge-Sicherheits-Daemon zu installieren, sondern können den IoT Edge-Simulator starten.

  1. Erweitern Sie in der Registerkarte Explorer auf der linken Seite den Abschnitt Azure IoT Hub. Klicken Sie mit der rechten Maustaste auf Ihre IoT Edge-Geräte-ID, und wählen Sie dann IoT Edge Simulator einrichten aus, um den Simulator ohne die Geräteverbindungszeichenfolge zu starten.

  2. Sie können sehen, dass der IoT Edge-Simulator erfolgreich eingerichtet wurde, indem Sie die Verlaufsdetails im integrierten Terminal lesen.

Erstellen und Ausführen eines Containers zum Debuggen und Debuggen im Modus „Anfügen“

  1. Öffnen Sie Ihre Moduldatei (Program.cs, app.js, App.java oder <your module name>.cs), und fügen Sie einen Haltepunkt hinzu.

  2. Klicken Sie in der Visual Studio Code-Exploreransicht mit der rechten Maustaste auf die deployment.debug.template.json-Datei für Ihre Projektmappe, und wählen Sie dann IoT Edge-Projektmappe im Simulator erstellen und ausführen aus. Im gleichen Fenster werden die Protokolle aller Modulcontainer angezeigt. Alternativ können Sie zur Docker-Ansicht navigieren, um den Containerstatus anzuzeigen.

    Beachten der Variablen

  3. Navigieren Sie zur Visual Studio Code-Debugansicht, und wählen Sie die Debugkonfigurationsdatei für Ihr Modul aus. Der Name der Debugoption sollte ähnlich lauten wie <Name Ihres Moduls> -Remotedebuggen

  4. Wählen Sie Debuggen starten aus, oder drücken Sie F5. Wählen Sie den Prozess zum Anfügen aus.

  5. In der Visual Studio Code-Debugansicht werden die Variablen im linken Bereich angezeigt.

  6. Um die Debugsitzung zu beenden, wählen Sie zunächst die Schaltfläche „Stopp“ aus, oder drücken Sie UMSCHALT + F5, und wählen Sie dann Azure IoT Edge: IoT Edge-Simulator beenden in der Befehlspalette aus.

Hinweis

Im obigen Beispiel wird veranschaulicht, wie Sie IoT Edge-Module in Containern debuggen. Dabei wurden den Containereinstellungen Ihres Moduls verfügbar gemachte Ports für createOptions hinzugefügt. Nachdem Sie das Debuggen Ihrer Module abgeschlossen haben, empfehlen wir Ihnen, diese verfügbar gemachten Ports für IoT Edge-Module, die für die Produktion bereit sind, zu entfernen.

Für Module, die in C# geschrieben wurden, einschließlich Azure Functions, basiert dieses Beispiel auf der Debugversion von Dockerfile.amd64.debug, die den .NET Core-Befehlszeilendebugger (VSDBG) beim Erstellen in Ihr Containerimage einbindet. Nach dem Debuggen Ihrer C#-Module sollten Sie direkt das Dockerfile ohne VSDBG für produktionsbereite IoT Edge-Module verwenden.

Debuggen eines Moduls mit der IoT Edge-Runtime

In jedem Modulordner gibt es mehrere Docker-Dateien für unterschiedliche Containertypen. Verwenden Sie eine der Dateien mit der Erweiterung .debug, um Ihr Modul zum Testen zu erstellen.

Beim Debuggen von Modulen über diese Methode werden Ihre Module auf der obersten Ebene der IoT Edge-Runtime ausgeführt. Das IoT Edge-Gerät und Ihr Visual Studio Code können sich auf demselben Computer befinden. Meist befindet sich jedoch Visual Studio Code auf dem Entwicklungscomputer, und die IoT Edge-Runtime und die Module werden auf einem anderen physischen Computer ausgeführt. Für das Debuggen in Visual Studio Code müssen Sie folgende Aktionen ausführen:

  • Richten Sie Ihr IoT Edge-Gerät ein, erstellen Sie IoT Edge-Module mit der Dockerfile .debug, und stellen Sie sie dann auf dem IoT Edge-Gerät bereit.
  • Machen Sie die IP-Adresse und den Port des Moduls verfügbar, damit der Debugger angefügt werden kann.
  • Aktualisieren Sie die Datei launch.json, damit Visual Studio Code an den Prozess im Container des Remotecomputers angefügt werden kann. Diese Datei befindet sich in Ihrem Arbeitsbereich im Ordner .vscode und wird bei jedem Hinzufügen ein neues Moduls, das Debuggen unterstützt, aktualisiert.

Erstellen und Bereitstellen Ihres Moduls auf dem IoT Edge-Gerät

  1. Öffnen Sie in Visual Studio Code die deployment.debug.template.json-Datei, die die Debugversion Ihres Modulimages mit den korrekt festgelegten Werten für createOptions enthält.

  2. Wenn Sie Ihr Modul in Python bereitstellen, führen Sie diese Schritte aus, bevor Sie fortfahren:

    • Öffnen Sie die Datei main.py, und fügen Sie hinter dem Importabschnitt diesen Code ein:

      import ptvsd
      ptvsd.enable_attach(('0.0.0.0',  5678))
      
    • Fügen Sie in den Rückruf, den Sie debuggen möchten, die folgende einzelne Codezeile ein:

      ptvsd.break_into_debugger()
      

      Wenn Sie beispielsweise die receive_message_listener-Funktion debuggen möchten, würden Sie diese Codezeile wie unten dargestellt einfügen:

      def receive_message_listener(client):
           ptvsd.break_into_debugger()
           global RECEIVED_MESSAGES
           while True:
               message = client.receive_message_on_input("input1")   # blocking call
               RECEIVED_MESSAGES += 1
               print("Message received on input1")
               print( "    Data: <<{}>>".format(message.data) )
               print( "    Properties: {}".format(message.custom_properties))
               print( "    Total calls received: {}".format(RECEIVED_MESSAGES))
               print("Forwarding message to output1")
               client.send_message_to_output(message, "output1")
               print("Message successfully forwarded")
      
  3. In der Visual Studio Code-Befehlspalette:

    1. Führen Sie den Befehl Azure IoT Edge: IoT Edge-Projektmappe erstellen und pushen aus.

    2. Wählen Sie die deployment.debug.template.json-Datei für Ihre Projektmappe aus.

  4. Führen Sie im Abschnitt Azure IoT Hub-Geräte der Visual Studio Code-Exploreransicht Folgendes aus:

    1. Klicken Sie mit der rechten Maustaste auf eine IoT Edge-Geräte-ID, und wählen Sie dann Create Deployment for Single Device (Bereitstellung für einzelnes Gerät erstellen) aus.

      Tipp

      Vergewissern Sie sich, dass es sich bei dem ausgewählten Gerät um ein IoT Edge-Gerät handelt. Wählen Sie dazu das Gerät aus, um die Liste mit den Modulen zu erweitern, und vergewissern Sie sich, dass $edgeHub und $edgeAgent vorhanden sind. Jedes IoT Edge-Gerät verfügt über diese beiden Module.

    2. Navigieren Sie zum Ordner config Ihrer Projektmappe, wählen Sie die Datei deployment.debug.amd64.json und dann Edge-Bereitstellungsmanifest auswählen aus.

Sie sehen nun, dass die Bereitstellung erfolgreich mit einer Bereitstellungs-ID im integrierten Terminal erstellt wurde.

Sie können Ihren Containerstatus durch Ausführen des Befehls docker ps im Terminal überprüfen. Wenn Visual Studio Code und Ihre IoT Edge-Runtime auf demselben Computer ausgeführt werden, können Sie den Status auch in der Docker-Ansicht von Visual Studio Code überprüfen.

Verfügbarmachen der IP-Adresse und des Ports des Moduls für den Debugger

Sie können diesen Abschnitt überspringen, wenn Ihre Module auf demselben Computer wie Visual Studio Code ausgeführt werden, da Sie zum Anfügen an den Container localhost nutzen und in der Dockerfile .debug, den createOptions-Einstellungen für den Container des Moduls und der Datei launch.json bereits die richtigen Porteinstellungen vorliegen. Wenn Ihre Module und Visual Studio Code auf unterschiedlichen Computern ausgeführt werden, führen Sie die Schritte für Ihre Programmiersprache aus.

  • C#, einschließlich Azure Functions

    Konfigurieren Sie den SSH-Kanal auf Ihrem Entwicklungscomputer und IoT Edge-Gerät, und bearbeiten Sie dann die anzufügende Datei launch.json.

  • Node.js

    • Stellen Sie sicher, dass das Modul auf dem zu debuggenden Computer ausgeführt wird und für die anzufügenden Debugger bereit ist und dass auf Port 9229 extern zugegriffen werden kann. Sie können dies überprüfen, indem Sie http://<target-machine-IP>:9229/json auf dem Debuggercomputer öffnen. Diese URL sollte Informationen zum Node.js-Modul zeigen, das debuggt werden soll.

    • Öffnen Sie auf dem Entwicklungscomputer Visual Studio Code, und bearbeiten Sie die Datei launch.json so, dass der Adresswert des Profils <Modulname> Remotedebug (Node.js) (oder des Profils <Modulname> Remotedebug (Node.js in Windows-Container) , wenn das Modul als Windows-Container ausgeführt wird) die IP-Adresse des zu debuggenden Computers ist.

  • Java

    • Erstellen Sie einen SSH-Tunnel zu dem zu debuggenden Computer, indem Sie ssh -f <username>@<target-machine> -L 5005:127.0.0.1:5005 -N ausführen.

    • Öffnen Sie auf dem Entwicklungscomputer Visual Studio Code, und bearbeiten Sie das Profil <Modulname> Remotedebugging (Java) in launch.json, damit Sie es an den Zielcomputer anfügen können. Weitere Informationen zum Bearbeiten von launch.json und zum Debuggen von Java mit Visual Studio Code finden Sie im Abschnitt zum Konfigurieren des Debuggers.

  • Python

    • Stellen Sie sicher, dass auf dem zu debuggenden Computer Port 5678 geöffnet und zugänglich ist.

    • Ändern Sie im Code ptvsd.enable_attach(('0.0.0.0', 5678)), den Sie zuvor in main.py eingefügt haben, 0.0.0.0 in die IP-Adresse des zu debuggenden Computers. Erstellen Sie Ihre IoT Edge-Module erneut, pushen Sie sie, und stellen Sie sie bereit.

    • Öffnen Sie auf dem Entwicklungscomputer Visual Studio Code, und bearbeiten Sie launch.json so, dass für den Wert host des Profils <Modulname> Remotedebugging (Python) die IP-Adresse des Zielcomputers anstelle von localhost verwendet wird.

Debuggen Ihres Moduls

  1. Wählen Sie in der Visual Studio Code-Debugansicht die Debugkonfigurationsdatei für Ihr Modul aus. Der Name der Debugoption sollte ähnlich lauten wie <Name Ihres Moduls> -Remotedebuggen

  2. Öffnen Sie die Moduldatei für Ihre Entwicklungssprache, und fügen Sie einen Haltepunkt hinzu:

    • Azure-Funktion (C#): Fügen Sie der Datei <your module name>.cs Ihren Breakpoint hinzu.
    • C# : Fügen Sie der Datei Program.cs Ihren Breakpoint hinzu.
    • Node.js: Fügen Sie der Datei app.js Ihren Breakpoint hinzu.
    • Java: Fügen Sie der Datei App.java Ihren Breakpoint hinzu.
    • Python: Fügen Sie der Datei main.py Ihren Breakpoint in der Rückrufmethode hinzu, der Sie die Zeile ptvsd.break_into_debugger() hinzugefügt hatten.
    • C: Fügen Sie der Datei main.c Ihren Breakpoint hinzu.
  3. Wählen Sie Debuggen starten oder F5 aus. Wählen Sie den Prozess zum Anfügen aus.

  4. In der Visual Studio Code-Debugansicht werden die Variablen im linken Bereich angezeigt.

Hinweis

Im obigen Beispiel wird veranschaulicht, wie Sie IoT Edge-Module in Containern debuggen. Dabei wurden den Containereinstellungen Ihres Moduls verfügbar gemachte Ports für createOptions hinzugefügt. Nachdem Sie das Debuggen Ihrer Module abgeschlossen haben, empfehlen wir Ihnen, diese verfügbar gemachten Ports für IoT Edge-Module, die für die Produktion bereit sind, zu entfernen.

Erstellen und Debuggen eines Moduls per Remotezugriff

Dank kürzlicher Änderungen in der Docker- und Moby-Engine zur Unterstützung von SSH-Verbindungen und einer neuen Einstellung in Azure IoT-Tools, die die Einschleusung von Umgebungseinstellungen in die Visual Studio Code-Befehlspalette und Azure IoT Edge-Terminals ermöglicht, können Sie jetzt Module auf Remotegeräten erstellen und debuggen.

Weitere Informationen und schrittweise Anleitungen finden Sie in diesem IoT Developer-Blogeintrag.

Nächste Schritte

Nachdem Sie das Modul erstellt haben, erfahren Sie, wie Sie Azure IoT Edge-Module aus Visual Studio Code bereitstellen.

Weitere Informationen zum Entwickeln Ihrer Module für Ihre IoT Edge-Geräte finden Sie unter Verstehen und Verwenden von Azure IoT Hub SDKs.