Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Applies to:
IoT Edge 1.5
Viktigt!
IoT Edge 1.5 LTS är den version som stöds. IoT Edge 1.4 LTS upphörde den 12 november 2024. Om du använder en tidigare version läser du Update IoT Edge.
I den här artikeln beskrivs hur du använder Visual Studio Code för att felsöka IoT Edge moduler på flera språk. På utvecklingsdatorn använder du Visual Studio Code för att ansluta och felsöka modulen i en lokal container eller en fjärrmodulcontainer.
Den här artikeln innehåller steg för två IoT Edge utvecklingsverktyg.
- Azure IoT Edge Dev Tool kommandoradsverktyget (CLI). Det här verktyget är att föredra för utveckling.
- Azure IoT Edge verktyg för tillägget Visual Studio Code. Tillägget är i underhållsläge.
Välj verktygsversionen med hjälp av knappen för verktygsväljaren i början av den här artikeln.
Visual Studio Code har stöd för att skriva IoT Edge moduler på följande programmeringsspråk:
- C# och C# Azure Functions
- C
- Python
- Node.js
- Java
Azure IoT Edge fungerar med dessa enhetsarkitekturer:
- AMD64
- ARM32v7
- ARM64
Mer information om operativsystem, språk och arkitekturer som stöds finns i Stöd för språk och arkitektur.
När du använder tillägget Visual Studio Code IoT Edge kan du även starta och felsöka modulkoden i IoT Edge Simulator.
Du kan också använda en Windows utvecklingsdator och felsöka moduler i en Linux-container med hjälp av IoT Edge för Linux på Windows (EFLOW). Mer information om hur du använder EFLOW för att utveckla moduler finns i Tutorial: Utveckla IoT Edge moduler med Linux-containrar med hjälp av IoT Edge för Linux på Windows.
Om du är nybörjare på felsökningsfunktionerna i Visual Studio Code kan du läsa Visual Studio Code felsökning.
Förutsättningar
Du kan använda en dator eller en virtuell dator som kör Windows, macOS eller Linux som utvecklingsdator. På Windows datorer kan du utveckla antingen Windows- eller Linux-moduler. Om du vill utveckla Linux-moduler använder du en Windows dator som uppfyller krav för Docker Desktop.
För att installera de verktyg som krävs för utveckling och felsökning, slutför Develop Azure IoT Edge modules using Visual Studio Code självstudie.
Installera Visual Studio Code.
Lägg till följande tillägg:
- Azure IoT Edge tillägg. Tillägget Azure IoT Edge för Visual Studio Code är i underhållsläge.
- Azure IoT Hub tillägg.
Om du vill felsöka modulen på en enhet behöver du:
- En aktiv IoT Hub med minst en IoT Edge enhet.
- En fysisk IoT Edge enhet eller en virtuell enhet. Skapa en virtuell enhet i Azure genom att följa stegen i quickstart för Linux.
- En anpassad IoT Edge modul. Om du vill skapa en anpassad modul följer du stegen i självstudiekursen Develop Azure IoT Edge med hjälp av Visual Studio Code.
Felsöka utan en container med hjälp av IoT Edge-simulatorn
IoT Edge Simulator är ett verktyg som körs på utvecklingsdatorn och simulerar beteendet för en enda IoT Edge enhet. Du kan använda IoT Edge Simulator för att utveckla och testa dina IoT Edge moduler utan en fysisk enhet eller en fullständig IoT Edge enhetskörning.
Följande felsökningssteg förutsätter att du redan har skapat en anpassad modul. Om du inte har skapat en anpassad modul, följ stegen i Develop Azure IoT Edge modules using Visual Studio Code tutorialen.
Det går inte att felsöka en modul utan en container när du använder C eller Python.
Felsöka i anslutningsläge med hjälp av IoT Edge simulator
Felsökning i kopplingsläge är inte tillgängligt för C eller Python.
Felsöka en modul med IoT Edge-runtime-miljön
Varje modulmapp innehåller flera Docker-filer för olika containertyper. Använd valfri fil som slutar med tillägget .debug för att skapa modulen för testning.
När du felsöker moduler med den här metoden körs modulerna ovanpå IoT Edge-körningen. Den IoT Edge enheten och Visual Studio Code kan köras på samma dator, men vanligtvis körs Visual Studio Code på utvecklingsdatorn medan IoT Edge-körningen och modulerna körs på en annan fysisk dator. Så här felsöker du från Visual Studio Code:
- Konfigurera din IoT Edge enhet, skapa dina IoT Edge moduler med .debug Dockerfile och distribuera sedan till IoT Edge enheten.
- Uppdatera
launch.jsonså att Visual Studio Code kan ansluta till processen i en container på fjärrdatorn. Du hittar den här filen i.vscodemappen på arbetsytan och uppdateras varje gång du lägger till en ny modul som stöder felsökning. - Använd fjärr-SSH-felsökning för att ansluta till containern på fjärrdatorn.
Skapa och distribuera modulen till en IoT Edge enhet
Öppna manifestfilen deployment.debug.template.json i Visual Studio Code. Manifestet deployment beskriver de moduler som ska konfigureras på målenheten IoT Edge. Innan distributionen uppdaterar du dina Azure Container Registry-autentiseringsuppgifter och modulbilder med rätt createOptions värden. Mer information om createOption-värden finns i Så här konfigurerar du alternativ för att skapa containrar för IoT Edge moduler.
Om du använder en Azure Container Registry för att lagra modulbilden kan du lägg till dina autentiseringsuppgifter i avsnittet edgeAgent>settings>registryCredentials i deployment.debug.template.json. Ersätt myacr med ditt eget registernamn på båda platserna och ange lösenordet och inloggningsserveradressen . Till exempel:
"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" } } } }, ...Lägg till eller ersätt följande strängifierade innehåll till createOptions-värdet för varje system (edgeHub och edgeAgent) och anpassad modul (till exempel filtermodul) i listan. Ändra värdena om det behövs.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"Till exempel bör filtermodulkonfigurationen likna:
"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\"}]}}}" }
- I kommandopaletten Visual Studio Code kör du kommandot Azure IoT Edge: Build and Push IoT Edge solution.
-
deployment.debug.template.jsonVälj filen för din lösning. - I avsnittet Azure IoT Hub>Enheter i Visual Studio Code Explorer-vyn högerklickar du på IoT Edge enhetsnamn för distribution och väljer sedan Skapa distribution för enskild enhet.
Tips
Bekräfta att enheten du har valt är en IoT Edge enhet genom att välja den för att expandera listan över moduler och kontrollera förekomsten av $edgeHub och $edgeAgent. Varje IoT Edge enhet innehåller dessa två moduler.
- Gå till lösningens konfigurationsmapp, välj filen och välj sedan Välj Edge-distributionsmanifest.
deployment.debug.amd64.json
Kontrollera containerstatusen från enheten eller den virtuella datorn genom att docker ps köra kommandot i en terminal. Du bör se containern i listan när du har kört kommandot. Om Visual Studio Code och IoT Edge körningen körs på samma dator kontrollerar du statusen i Visual Studio Code Docker-vyn.
Viktigt!
Om du använder ett privat register som Azure Container Registry för dina avbildningar kan du behöva autentisera för att skicka avbildningar. Använd docker login <Azure Container Registry login server> eller az acr login --name <Azure Container Registry name> för att autentisera.
Logga in på Docker
Ange dina autentiseringsuppgifter för containerregistret till Docker så att den kan skicka containeravbildningen till lagring i registret.
Logga in på Docker med de Azure Container Registry autentiseringsuppgifter som du sparade när du skapade registret.
docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>Du kan få en säkerhetsvarning som rekommenderar användning av
--password-stdin. Även om det är en rekommenderad metod för produktionsscenarier är det utanför omfånget för den här självstudien. Mer information finns i docker-inloggningsreferensen.Logga in på Azure Container Registry. Du kan behöva Installera Azure CLI för att använda kommandot
az. Det här kommandot frågar efter ditt användarnamn och lösenord som finns i containerregistret i Inställningar>Åtkomstnycklar.az acr login -n <Azure Container Registry name>
Tips
Om du blir utloggad någon gång i den här självstudien upprepar du stegen för att logga in på Docker samt Azure Container Registry för att fortsätta.
Docker-avbildning för byggmodul
Använd modulens Dockerfile för att skapa Docker-avbildningen.
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Om du till exempel vill skapa avbildningen för det lokala registret eller en Azure Container Registry använder du följande kommandon:
# 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"
Push-modul Docker-bild
Skicka modulavbildningen till det lokala registret eller ett containerregister.
docker push <ImageName>
Till exempel:
# 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
Distribuera modulen till den IoT Edge enheten
Använd kommandot IoT Edge Azure CLI set-modules för att distribuera modulerna till Azure IoT Hub. Om du till exempel vill distribuera modulerna som definierats i filen deployment.debug.template.json till IoT Hub my-iot-hub för IoT Edge enheten my-device använder du följande kommando:
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>"
Tips
Du hittar din IoT Hub delade åtkomstnyckel i Azure-portalen i IoT Hub >Säkerhetsinställningar>Delade åtkomstprinciper>iothubowner.
Felsöka din modul
Om du vill felsöka moduler på en fjärrenhet använder du Fjärr-SSH-felsökning i Visual Studio Code.
Aktivera Visual Studio Code fjärrfelsökning genom att installera Remote Development-tillägget. För mer information om fjärrfelsökning med Visual Studio Code, se Visual Studio Code Fjärrutveckling.
Mer information om hur du använder fjärr-SSH-felsökning i Visual Studio Code finns i Remote Development using SSH.
I vyn Visual Studio Code Felsökning väljer du felsökningskonfigurationsfilen för modulen. Standardinställningen är att Dockerfilen .debug, containerinställningar för modulen createOptions och filen launch.json använder localhost.
Välj Starta felsökning eller F5 och välj sedan den process som ska kopplas till. I Debug-vyn i Visual Studio Code visas variabler i den vänstra panelen.
Felsöka med Docker remote SSH
Docker- och Moby-motorerna stöder SSH-anslutningar till containrar så att du kan felsöka i Visual Studio Code anslutna till en fjärrenhet. Du måste uppfylla följande krav innan du kan använda den här funktionen.
Kraven för fjärr-SSH-felsökning kan variera beroende på vilket språk du använder. I följande avsnitt beskrivs konfigurationen för .NET. Mer information om andra språk finns i Fjärrutveckling med hjälp av SSH för en översikt. Information om hur du konfigurerar fjärrfelsökning finns i felsökningsavsnitt för varje språk i Visual Studio Code dokumentationen.
Konfigurera Docker SSH-tunnlar
Följ stegen i Docker SSH-tunnlar för att konfigurera SSH-tunnlar på utvecklingsdatorn. SSH-tunneltrafik kräver autentisering med offentliga/privata nyckelpar och en Docker-kontext som definierar fjärrenhetens slutpunkt.
Anslutning till Docker kräver rotprivilegier. Följ stegen i Hantera docker som en icke-rotanvändare för att tillåta anslutning till Docker-daemonen på fjärrenheten. När du är klar med felsökningen kanske du vill ta bort användaren från Docker-gruppen.
I Visual Studio Code använder du kommandopaletten (Ctrl+Skift+P) för att utfärda kommandot Docker Context: Use för att aktivera Docker-kontexten som pekar på fjärrdatorn. Med det här kommandot kan både Visual Studio Code och Docker CLI använda fjärrdatorkontexten.
Tips
Alla Docker-kommandon använder den aktuella kontexten. Kom ihåg att ändra tillbaka kontexten till standard när du är klar med felsökningen.
Om du vill kontrollera att Docker-fjärrkontexten är aktiv anger du de containrar som körs på fjärrenheten:
docker psUtdata visar de containrar som körs på fjärrenheten, ungefär så här:
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 edgeAgentI katalogen .vscode öppnar du launch.json i Visual Studio Code och lägger till en ny konfiguration. Välj Lägg till konfiguration och välj sedan den matchande mallen för fjärranslutning för modulen. Följande konfiguration gäller till exempel för .NET Core. Ändra värdet för parametern -H i PipeArgs till enhetens DNS-namn eller IP-adress.
"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 },
Felsöka modulen via fjärranslutning
I Visual Studio Code felsökningsvyn väljer du felsökningskonfigurationen Remote Debug IoT Edge Module (.NET Core).
Välj Starta felsökning eller välj F5. Välj den process som ska kopplas till.
I den Felsökningsvyn i Visual Studio Code visas variablerna i den vänstra panelen.
I Visual Studio Code anger du brytpunkter i din anpassade modul.
När en brytpunkt nås kan du inspektera variabler, stega igenom kod och felsöka modulen.
Kommentar
Föregående exempel visar hur du felsöker IoT Edge moduler på fjärrcontainrar. Exemplet lägger till en fjärransluten Docker-kontext och ändringar i Docker-behörigheterna på fjärrenheten. När du har felsökt modulerna ställer du in Docker-kontexten som standard och tar bort behörigheter från ditt användarkonto.
I det här blogginlägget för IoT Developer finns ett exempel på hur du använder en Raspberry Pi-enhet.
Nästa steg
När du har skapat modulen lär du dig att distribuera Azure IoT Edge moduler.
Om du vill utveckla moduler för dina IoT Edge enheter kan du lära dig mer om och använda Azure IoT Hub SDK:er.