Fouten opsporen in Azure IoT Edge-modules met Visual Studio Code

Van toepassing op:IoT Edge 1.4 checkmark IoT Edge 1.4

Belangrijk

IoT Edge 1.4 is de ondersteunde release. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.

In dit artikel leest u hoe u Visual Studio Code gebruikt om fouten in IoT Edge-modules in meerdere talen op te sporen. Op uw ontwikkelcomputer kunt u Visual Studio Code gebruiken 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 ontwikkeling.
  • Azure IoT Edge-hulpprogramma's voor Visual Studio Code-extensie . De extensie bevindt zich in de onderhoudsmodus.

Gebruik de knop toolselector aan het begin van dit artikel om de versie van het hulpprogramma te selecteren.

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

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

Azure IoT Edge ondersteunt de volgende 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 ook de modulecode 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 in Windows (EFLOW). Zie zelfstudie: IoT Edge-modules ontwikkelen met Linux-containers met Behulp van IoT Edge voor Linux in Windows voor meer informatie over het gebruik van EFLOW voor het ontwikkelen van modules.

Als u niet bekend bent met de foutopsporingsmogelijkheden van Visual Studio Code, raadpleegt u Foutopsporing in Visual Studio Code.

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 vereisten voor Docker Desktop.

Voltooi de zelfstudie Azure IoT Edge-modules ontwikkelen met behulp van Visual Studio Code om de vereiste hulpprogramma's voor ontwikkeling en foutopsporing te installeren.

Visual Studio Code installeren

Voeg de volgende 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 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 Runtime van een IoT Edge-apparaat.

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 Azure IoT Edge-modules ontwikkelen met behulp van Visual Studio Code .

Foutopsporing van een module zonder container is niet beschikbaar bij het gebruik van C of Python.

Fouten opsporen in de bijlagemodus met behulp van ioT Edge-simulator

Foutopsporing in de bijlagemodus wordt niet ondersteund voor C of Python.

Fouten opsporen in een module met de IoT Edge-runtime

In elke modulemap zijn er verschillende Docker-bestanden voor verschillende containertypen. Gebruik een van de bestanden die eindigen met de extensie .debug om uw module te bouwen voor testen.

Wanneer u fouten in modules opssport met deze methode, worden uw modules uitgevoerd boven op de IoT Edge-runtime. Het IoT Edge-apparaat en uw Visual Studio Code kunnen zich op dezelfde computer bevinden. Visual Studio Code bevindt zich meestal op de ontwikkelcomputer en de IoT Edge-runtime en -modules worden uitgevoerd op een andere fysieke computer. Als u fouten wilt opsporen vanuit Visual Studio Code, moet u het volgende doen:

  • Stel uw IoT Edge-apparaat in, bouw uw IoT Edge-modules met het Dockerfile voor foutopsporing en implementeer vervolgens op het IoT Edge-apparaat.
  • Werk launch.json bij zodat Visual Studio Code kan worden gekoppeld aan het proces in een container op de externe computer. U vindt dit bestand in de .vscode 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 voor de deployment.debug.template.json-implementatie . In het implementatiemanifest worden de modules beschreven die moeten worden geconfigureerd op het beoogde IoT Edge-apparaat. Voordat u gaat implementeren, moet u uw Azure Container Registry-referenties en uw moduleinstallatiekopieën bijwerken met de juiste createOptions waarden. Zie Opties voor het maken van containers configureren voor IoT Edge-modules voor meer informatie over createOption-waarden.

  1. Als u een Azure Container Registry gebruikt om de installatiekopie van de module op te slaan, voegt u uw referenties toe aan de sectie registerCredentials van edgeAgent>>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 tekenreeksinhoud toe aan of vervang deze door de waarde createOptions 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 opdrachtenpalet van Visual Studio Code de opdracht Azure IoT Edge uit: Een IoT Edge-oplossing bouwen en pushen.
  2. Selecteer het deployment.debug.template.json bestand voor uw oplossing.
  3. Klik in de sectie Azure IoT Hub-apparaten> van de Visual Studio Code Explorer-weergave met de rechtermuisknop op de naam van het IoT Edge-apparaat voor implementatie en kies Implementatie voor één apparaat maken.

    Tip

    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 deployment.debug.amd64.json bestand en selecteer vervolgens Edge-implementatiemanifest selecteren.

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

Belangrijk

Als u een privéregister zoals Azure Container Registry voor uw installatiekopieën gebruikt, moet u zich mogelijk verifiëren om installatiekopieën te pushen. 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 wordt een beveiligingswaarschuwing weergegeven waarin het gebruik van --password-stdin wordt aanbevolen. Hoewel dit 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 Azure CLI installeren om de az opdracht te kunnen gebruiken. Met deze opdracht wordt u gevraagd om uw gebruikersnaam en wachtwoord in het containerregister in Instellingen> Access-sleutels.

    az acr login -n <Azure Container Registry name>
    

Tip

Als u op enig moment in deze zelfstudie wordt afgemeld, herhaalt u de aanmeldingsstappen van Docker en Azure Container Registry om door te gaan.

Docker-installatiekopieën bouwen

Gebruik het Dockerfile van de module om de Docker-moduleinstallatiekopieë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-installatiekopieën van pushmodule

Push de module-installatiekopieën naar het lokale register of 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 Azure CLI-setmodules voor IoT Edge om de modules te implementeren in de Azure IoT Hub. Als u bijvoorbeeld de modules wilt implementeren die in het deployment.debug.template.json-bestand zijn gedefinieerd in IoT Hub my-iot-hub voor het IoT Edge-apparaat, 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>"

Tip

U vindt uw gedeelde IoT Hub-toegangssleutel in Azure Portal in uw Gedeelde toegangsbeleid>voor IoT Hub-beveiligingsinstellingen >>voor iothubowner.

Fouten opsporen in uw module

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

Als u externe foutopsporing voor Visual Studio Code wilt inschakelen, installeert u de extensie Remote Development. Zie Externe ontwikkeling van Visual Studio Code voor meer informatie over externe foutopsporing in Visual Studio Code.

Zie Externe ontwikkeling met behulp van SSH voor meer informatie over het gebruik van externe SSH-foutopsporing in Visual Studio Code

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

Selecteer Foutopsporing starten of F5 selecteren. Selecteer het proces waaraan u wilt koppelen. In de weergave Foutopsporing in Visual Studio Code ziet u variabelen in het linkerdeelvenster.

Fouten opsporen met behulp van Docker Remote SSH

De Docker- en Moby-engines ondersteunen SSH-verbindingen met containers, zodat u fouten kunt opsporen in Visual Studio Code die is 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 secties voor foutopsporing voor elke taal in de Documentatie van Visual Studio Code.

Docker SSH-tunneling configureren

  1. Volg de stappen in Docker SSH-tunneling om SSH-tunneling op uw ontwikkelcomputer te configureren. 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. Verbinding maken voor Docker zijn bevoegdheden op hoofdniveau 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, kunt u de gebruiker verwijderen uit de Docker-groep.

  3. Gebruik in Visual Studio Code het opdrachtpalet (Ctrl+Shift+P) om de Docker-context uit te geven: gebruik de opdracht om de Docker-context te activeren die verwijst naar de externe computer. Deze opdracht zorgt ervoor dat visual Studio Code en Docker CLI de context van de externe machine gebruiken.

    Tip

    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
    

    In de uitvoer worden de containers weergegeven die op het externe apparaat worden uitgevoerd, vergelijkbaar:

    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.4                            "/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.4                          "/bin/sh -c 'exec /a…"    24 hours ago   Up 6 minutes                                                                                                    
                                           edgeAgent
    
  5. Voeg in de map .vscode een nieuwe configuratie toe aan launch.json door het bestand te openen in Visual Studio Code. Selecteer Configuratie toevoegen en kies vervolgens de overeenkomende sjabloon voor externe koppeling 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 de weergave Foutopsporing in Visual Studio Code de foutopsporingsconfiguratie remote debug IoT Edge Module (.NET Core).

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

  3. In de weergave Foutopsporing 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.

    Screenshot of Visual Studio Code attached to a Docker container on a remote device paused at a breakpoint.

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 gemaakt, leert u hoe u Azure IoT Edge-modules implementeert vanuit Visual Studio Code.

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