Delen via


Fouten opsporen in Azure IoT Edge modules met behulp van Visual Studio Code

Applies to:IoT Edge 1.5 checkmark IoT Edge 1.5

Belangrijk

IoT Edge 1.5 LTS is de ondersteunde release. IoT Edge 1.4 LTS bereikt het einde van de levensduur op 12 november 2024. Als u een eerdere versie gebruikt, raadpleegt u Update IoT Edge.

In dit artikel wordt uitgelegd hoe u Visual Studio Code kunt gebruiken om fouten in IoT Edge modules in meerdere talen op te sporen. Gebruik Visual Studio Code op uw ontwikkelcomputer om uw module te koppelen en fouten op te sporen in een lokale of externe modulecontainer.

Dit artikel bevat stappen voor twee IoT Edge ontwikkelhulpprogramma's.

  • Azure IoT Edge Dev Tool opdrachtregelprogramma (CLI). Dit hulpprogramma heeft de voorkeur voor ontwikkelingsdoeleinden.
  • Azure IoT Edge-hulpprogramma's voor Visual Studio Code-extensie. De extensie bevindt zich in de onderhoudsmodus.

Selecteer de versie van het hulpprogramma met behulp van de knop toolkiezer aan het begin van dit artikel.

Visual Studio Code ondersteunt het schrijven van IoT Edge modules in de volgende programmeertalen:

  • C# en C# Azure Functions
  • C
  • Python
  • Node.js
  • Java

Azure IoT Edge werkt met deze apparaatarchitecturen:

  • AMD64
  • ARM32v7
  • ARM64

Zie taal- en architectuurondersteuning voor meer informatie over ondersteunde besturingssystemen, talen en architecturen.

Wanneer u de Visual Studio Code IoT Edge-extensie gebruikt, kunt u de modulecode ook starten en fouten opsporen in de IoT Edge Simulator.

U kunt ook een Windows ontwikkelcomputer en foutopsporingsmodules in een Linux-container gebruiken met behulp van IoT Edge voor Linux op Windows (EFLOW). Zie Tutorial: Ontwikkel IoT Edge modules met Linux-containers met IoT Edge voor Linux op Windows voor meer informatie over het gebruik van EFLOW voor het ontwikkelen van modules.

Als u nieuw bent met de foutopsporingsmogelijkheden van Visual Studio Code, zie Visual Studio Code foutopsporing.

Vereisten

U kunt een computer of een virtuele machine met Windows, macOS of Linux gebruiken als uw ontwikkelcomputer. Op Windows computers kunt u Windows- of Linux-modules ontwikkelen. Als u Linux-modules wilt ontwikkelen, gebruikt u een Windows computer die voldoet aan de vragen voor Docker Desktop.

Als u de vereiste hulpprogramma's voor ontwikkeling en foutopsporing wilt installeren, voltooit u de Ontwikkelingsmodules Azure IoT Edge met behulp van Visual Studio Code zelfstudie.

Installeer Visual Studio Code.

Voeg deze extensies toe:

Als u fouten in uw module op een apparaat wilt opsporen, hebt u het volgende nodig:

Fouten opsporen zonder een container met behulp van de IoT Edge simulator

De IoT Edge Simulator is een hulpprogramma dat wordt uitgevoerd op uw ontwikkelcomputer en het gedrag van één IoT Edge apparaat simuleert. U kunt de IoT Edge Simulator gebruiken om uw IoT Edge modules te ontwikkelen en te testen zonder een fysiek apparaat of een volledige IoT Edge apparaatruntime.

Bij de volgende foutopsporingsstappen wordt ervan uitgegaan dat u al een aangepaste module hebt gemaakt. Als u nog geen aangepaste module hebt gemaakt, volgt u de stappen in de zelfstudie Ontwikkeling Azure IoT Edge modules met behulp van Visual Studio Code zelfstudie.

Foutopsporing van een module zonder container is niet beschikbaar wanneer u C of Python gebruikt.

Fouten opsporen in de bijlagemodus met behulp van IoT Edge simulator

Foutopsporing in de bijlagemodus is niet beschikbaar voor C of Python.

Fouten opsporen in een module met de IoT Edge runtime

Elke modulemap bevat verschillende Docker-bestanden voor verschillende containertypen. Gebruik een bestand dat eindigt met de extensie .debug om uw module te bouwen voor testen.

Wanneer u fouten in modules opspoort met deze methode, worden uw modules uitgevoerd bovenop de IoT Edge-runtime. Het IoT Edge apparaat en Visual Studio Code kunnen op dezelfde computer worden uitgevoerd, maar meestal wordt Visual Studio Code uitgevoerd op de ontwikkelcomputer terwijl de IoT Edge runtime en modules worden uitgevoerd op een andere fysieke machine. Fouten opsporen vanuit Visual Studio Code:

  • Stel uw IoT Edge-apparaat in, bouw uw IoT Edge-modules met de .debug Dockerfile en implementeer deze vervolgens op het IoT Edge apparaat.
  • Werk launch.json bij zodat Visual Studio Code aan het proces in een container op de externe computer kan koppelen. U vindt dit bestand in de map in uw werkruimte en wordt bijgewerkt telkens wanneer u een nieuwe module toevoegt die ondersteuning biedt voor foutopsporing.
  • Gebruik externe SSH-foutopsporing om te koppelen aan de container op de externe computer.

Uw module bouwen en implementeren op een IoT Edge-apparaat

Open in Visual Studio Code het manifestbestand deployment.debug.template.json- implementatiemanifest. In het manifest deployment worden de modules beschreven die moeten worden geconfigureerd op het doelapparaat IoT Edge. Werk vóór de implementatie uw Azure Container Registry inloggegevens en module-afbeeldingen bij met de juiste createOptions waarden. Zie Het configureren van opties voor het maken van containers voor IoT Edge modules voor meer informatie over createOption-waarden.

  1. Als u een Azure Container Registry gebruikt om de module-installatiekopieën op te slaan, voeg uw referenties toe aan de sectie edgeAgent>settings>registryCredentials in deployment.debug.template.json. Vervang myacr door uw eigen registernaam op beide plaatsen en geef uw wachtwoord en aanmeldingsserveradres op. Voorbeeld:

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_azure_container_registry_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    ...
    
  2. Voeg de volgende gestringde inhoud toe aan de waarde createOptions of vervang deze, voor elk systeem (edgeHub en edgeAgent) en aangepaste module (bijvoorbeeld filtermodule). Wijzig indien nodig de waarden.

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    

    De filtermoduleconfiguratie moet bijvoorbeeld vergelijkbaar zijn met:

    "filtermodule": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    
  1. Voer in het Visual Studio Code opdrachtpalet de opdracht Azure IoT Edge: Build and Push IoT Edge solution uit.
  2. Selecteer het bestand voor uw oplossing.
  3. Klik in de sectie Azure IoT Hub>Devices van de weergave Visual Studio Code Explorer met de rechtermuisknop op de IoT Edge apparaatnaam voor implementatie en kies Implementatie maken voor één apparaat.

    Aanbeveling

    Als u wilt controleren of het apparaat dat u hebt gekozen een IoT Edge apparaat is, selecteert u het om de lijst met modules uit te vouwen en de aanwezigheid van $edgeHub en $edgeAgent te controleren. Elk IoT Edge apparaat bevat deze twee modules.

  4. Navigeer naar de configuratiemap van uw oplossing, selecteer het bestand en selecteer vervolgens Edge-implementatiemanifest selecteren.

Controleer de containerstatus vanaf uw apparaat of virtuele machine door de opdracht uit te voeren in een terminal. De container wordt weergegeven nadat u de opdracht hebt uitgevoerd. Als Visual Studio Code en de IoT Edge runtime op dezelfde computer worden uitgevoerd, controleert u de status in de Visual Studio Code Docker-weergave.

Belangrijk

Als u een privé-register gebruikt, zoals Azure Container Registry voor uw afbeeldingen, moet u zich mogelijk verifiëren om afbeeldingen te uploaden. Gebruik docker login <Azure Container Registry login server> of az acr login --name <Azure Container Registry name> om te verifiëren.

Aanmelden bij Docker

Geef uw containerregisterreferenties op voor Docker, zodat deze uw containerinstallatiekopieën naar de opslag in het register kan pushen.

  1. Meld u aan bij Docker met de Azure Container Registry referenties die u hebt opgeslagen nadat u het register hebt gemaakt.

    docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
    

    Mogelijk ontvangt u een beveiligingswaarschuwing waarin het gebruik van een specifieke methode wordt aanbevolen. Hoewel het een aanbevolen best practice is voor productiescenario's, valt dit buiten het bereik van deze zelfstudie. Zie de documentatie voor aanmelding bij Docker voor meer informatie.

  2. Meld u aan bij de Azure Container Registry. Mogelijk moet u Install Azure CLI gebruiken om de opdracht az te gebruiken. Met deze opdracht wordt u gevraagd om uw gebruikersnaam en wachtwoord te geven zoals te vinden in uw containerregister in de instellingen bij Toegangssleutels.

    az acr login -n <Azure Container Registry name>
    

Aanbeveling

Als u op enig moment tijdens deze handleiding wordt afgemeld, herhaalt u de aanmeldingsstappen voor Docker en Azure Container Registry om verder te gaan.

Module Docker-afbeelding bouwen

Gebruik het Dockerfile van de module om de Docker-installatiekopieën te bouwen .

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

Als u bijvoorbeeld de installatiekopieën voor het lokale register of een Azure Container Registry wilt maken, gebruikt u de volgende opdrachten:

# Build the image for the local registry

docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t localhost:5000/filtermodule:0.0.1-amd64 "./modules/filtermodule"

# Or build the image for an Azure Container Registry

docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t myacr.azurecr.io/filtermodule:0.0.1-amd64 "./modules/filtermodule"

Docker-afbeelding van Push-module

Push uw module-afbeelding naar het lokale register of naar een containerregister.

docker push <ImageName>

Voorbeeld:

# Push the Docker image to the local registry

docker push localhost:5000/filtermodule:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/filtermodule:0.0.1-amd64

De module implementeren op het IoT Edge-apparaat

Gebruik de opdracht IoT Edge Azure CLI set-modules om de modules in de Azure IoT Hub te implementeren. Als u bijvoorbeeld de modules wilt implementeren die zijn gedefinieerd in het bestand deployment.debug.template.json naar IoT Hub my-iot-hub voor het IoT Edge apparaat my-device gebruikt u de volgende opdracht:

az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Aanbeveling

U vindt uw IoT Hub gedeelde toegangssleutel in de Azure-portal in uw IoT Hub >Beveiligingsinstellingen>Shared-toegangsbeleid>iothubowner.

Debuggen van uw module

Als u fouten in modules op een extern apparaat wilt opsporen, gebruikt u externe SSH-foutopsporing in Visual Studio Code.

Schakel Visual Studio Code externe foutopsporing in door de extensie Remote Development te installeren. Zie Visual Studio Code Externe ontwikkeling voor meer informatie over Visual Studio Code externe foutopsporing.

Zie Remote Development met behulp van SSH voor meer informatie over het gebruik van externe SSH-foutopsporing in Visual Studio Code.

Selecteer in de weergave Visual Studio Code Foutopsporing het configuratiebestand voor foutopsporing voor de module. Standaard gebruiken de .debug Dockerfile, containerinstellingen van de module en het bestand localhost.

Selecteer Foutopsporing starten of F5 en selecteer vervolgens het proces waaraan u wilt koppelen. In de Debug-weergave van Visual Studio Code ziet u variabelen in het linker paneel.

Fouten opsporen met externe SSH van Docker

De Docker- en Moby-engines ondersteunen SSH-verbindingen met containers, zodat u fouten kunt opsporen in Visual Studio Code verbonden met een extern apparaat. U moet aan de volgende vereisten voldoen voordat u deze functie kunt gebruiken.

Vereisten voor externe SSH-foutopsporing kunnen verschillen, afhankelijk van de taal die u gebruikt. In de volgende secties wordt de installatie voor .NET beschreven. Zie Remote Development met behulp van SSH voor een overzicht voor meer informatie over andere talen. Meer informatie over het configureren van externe foutopsporing vindt u in de secties voor foutopsporing voor elke taal in de Visual Studio Code documentatie.

Docker SSH-tunneling configureren

  1. Volg de stappen in Docker SSH-tunneling om SSH-tunneling in te stellen op uw ontwikkelcomputer. Voor SSH-tunneling is verificatie van een openbaar/persoonlijk sleutelpaar en een Docker-context vereist waarmee het eindpunt van het externe apparaat wordt gedefinieerd.

  2. Voor het maken van verbinding met Docker zijn hoofdbevoegdheden vereist. Volg de stappen in Docker beheren als een niet-hoofdgebruiker om verbinding met de Docker-daemon op het externe apparaat toe te staan. Wanneer u klaar bent met foutopsporing, wilt u mogelijk uw gebruiker verwijderen uit de Docker-groep.

  3. Gebruik in Visual Studio Code het opdrachtpalet (Ctrl+Shift+P) om de opdracht Docker-context uit te geven: Use om de Docker-context te activeren die verwijst naar de externe computer. Met deze opdracht kunnen zowel Visual Studio Code als Docker CLI de context van de externe machine gebruiken.

    Aanbeveling

    Alle Docker-opdrachten gebruiken de huidige context. Vergeet niet om de context weer te wijzigen in de standaardinstelling wanneer u klaar bent met foutopsporing.

  4. Als u wilt controleren of de externe Docker-context actief is, vermeldt u de actieve containers op het externe apparaat:

    docker ps
    

    De uitvoer bevat de containers die op het externe apparaat draaien, als de volgende:

    PS C:\> docker ps        
    CONTAINER ID   IMAGE                                                             COMMAND                   CREATED        STATUS         PORTS                                                                                                                                   NAMES
    a317b8058786   myacr.azurecr.io/filtermodule:0.0.1-amd64                         "dotnet filtermodule…"    24 hours ago   Up 6 minutes                                                                                                                                           filtermodule
    d4d949f8dfb9   mcr.microsoft.com/azureiotedge-hub:1.5                            "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes   0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5671->5671/tcp, :::5671->5671/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 1883/tcp   edgeHub
    1f0da9cfe8e8   mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0   "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes                                                                                                    
                                           tempSensor
    66078969d843   mcr.microsoft.com/azureiotedge-agent:1.5                          "/bin/sh -c 'exec /a…"    24 hours ago   Up 6 minutes                                                                                                    
                                           edgeAgent
    
  5. Open in de map .vscodelaunch.json in Visual Studio Code en voeg een nieuwe configuratie toe. Selecteer Configuratie toevoegen en kies vervolgens de overeenkomende externe bijlagesjabloon voor uw module. De volgende configuratie is bijvoorbeeld voor .NET Core. Wijzig de waarde voor de parameter -H in PipeArgs in dns-naam of IP-adres van uw apparaat.

    "configurations": [
    {
      "name": "Remote Debug IoT Edge Module (.NET Core)",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:pickRemoteProcess}",
      "pipeTransport": {
        "pipeProgram": "docker",
        "pipeArgs": [
          "-H",
          "ssh://user@my-device-vm.eastus.cloudapp.azure.com:22",
          "exec",
          "-i",
          "filtermodule",
          "sh",
          "-c"
        ],
        "debuggerPath": "~/vsdbg/vsdbg",
        "pipeCwd": "${workspaceFolder}",
        "quoteArgs": true
      },
      "sourceFileMap": {
        "/app": "${workspaceFolder}/modules/filtermodule"
      },
      "justMyCode": true
    },
    

Fouten in uw module op afstand opsporen

  1. Selecteer in Visual Studio Code, in de foutopsporingsweergave, de foutopsporingsconfiguratie Remote Debug IoT Edge Module (.NET Core).

  2. Selecteer Foutopsporing starten of druk op F5. Selecteer het proces waaraan u wilt koppelen.

  3. In de Debug-weergave van Visual Studio Code ziet u de variabelen in het linkerdeelvenster.

  4. Stel in Visual Studio Code onderbrekingspunten in uw aangepaste module in.

  5. Wanneer een onderbrekingspunt wordt bereikt, kunt u variabelen inspecteren, code doorlopen en fouten opsporen in uw module.

    Schermopname van Visual Studio Code gekoppeld aan een Docker-container op een extern apparaat dat is onderbroken op een onderbrekingspunt.

Notitie

In het voorgaande voorbeeld ziet u hoe u fouten in IoT Edge modules op externe containers kunt opsporen. In het voorbeeld wordt een externe Docker-context toegevoegd en worden de Docker-bevoegdheden op het externe apparaat gewijzigd. Nadat u klaar bent met het opsporen van fouten in uw modules, stelt u de Docker-context in op de standaardinstelling en verwijdert u bevoegdheden uit uw gebruikersaccount.

Zie dit Blogbericht voor IoT Developer voor een voorbeeld met behulp van een Raspberry Pi-apparaat.

Volgende stappen

Nadat u uw module hebt gebouwd, leert u hoe u modules van Azure IoT Edge kunt implementeren.

Als u modules voor uw IoT Edge-apparaten wilt ontwikkelen, leert u Azure IoT Hub SDK's gebruiken.