Använda Visual Studio Code för att felsöka kompilerade cmdletar

Den här guiden visar hur du felsöker C#-källkod interaktivt för en kompilerad PowerShell-modul med hjälp av Visual Studio Code (VS Code) och C#-tillägget.

Viss kunskap om felsökningsprogrammet i Visual Studio Code förutsätts.

Den här guiden förutsätter att du har läst och följt instruktionerna i handboken Skriva bärbara moduler .

Skapa en bygguppgift

Skapa projektet automatiskt innan du startar en felsökningssession. Återskapande säkerställer att du felsöker den senaste versionen av koden.

Konfigurera en bygguppgift:

  1. Kör kommandot Configure Default Build Task (Konfigurera standardversionsuppgift) på kommandopaletten.

    Kör Konfigurera standardversionsuppgift

  2. I dialogrutan Välj en uppgift att konfigurera väljer du Skapa tasks.json-fil från mallen.

  3. I dialogrutan Välj en uppgiftsmall väljer du .NET Core.

En ny tasks.json fil skapas om den inte finns ännu.

Så här testar du bygguppgiften:

  1. Kör kommandot Run Build Task (Kör build-uppgift) på kommandopaletten.

  2. I dialogrutan Välj den build-uppgift som ska köras väljer du skapa.

Information om DLL-filer som låses

Som standard visar inte en lyckad version utdata i terminalfönstret. Om du ser utdata som innehåller texten Project-filen inte finns bör du redigera tasks.json filen. Inkludera den explicita sökvägen till C#-projektet uttryckt som "${workspaceFolder}/myModule". I det här exemplet myModule är namnet på projektmappen. Den här posten måste gå efter build posten i listan på args följande sätt:

    {
        "label": "build",
        "command": "dotnet",
        "type": "shell",
        "args": [
            "build",
            "${workspaceFolder}/myModule",
            // Ask dotnet build to generate full paths for file names.
            "/property:GenerateFullPaths=true",
            // Do not generate summary otherwise it leads to duplicate errors in Problems panel
            "/consoleloggerparameters:NoSummary",
        ],
        "group": "build",
        "presentation": {
            "reveal": "silent"
        },
        "problemMatcher": "$msCompile"
    }

Vid felsökning importeras modul-DLL:en till PowerShell-sessionen i VS Code-terminalen. DLL-filen blir låst. Följande meddelande visas när du kör byggaktiviteten utan att stänga terminalsessionen:

Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.

Terminalsessioner måste stängas innan du återskapar.

Konfigurera felsökningsprogrammet

Om du vill felsöka PowerShell-cmdleten måste du konfigurera en anpassad startkonfiguration. Den här konfigurationen används för att:

  • Skapa källkoden
  • Starta PowerShell med modulen inläst
  • Låt PowerShell vara öppet i terminalfönstret

När du anropar din cmdlet i terminalsessionen stoppas felsökningsprogrammet vid alla brytpunkter som anges i källkoden.

Konfigurera launch.json för PowerShell

  1. Installera tillägget C# för Visual Studio Code

  2. Lägg till en felsökningskonfiguration i felsökningsfönstret

  3. Select environment I dialogrutan väljer du.NET Core

  4. Filen launch.json öppnas i redigeraren. Med markören inuti matrisen configurations ser du väljaren configuration . Om du inte ser den här listan väljer du Lägg till konfiguration.

  5. Om du vill skapa en standardkonfiguration för felsökning väljer du Starta .NET Core-konsolapp:

    Starta .NET Core-konsolappen

  6. Redigera fälten name, program, argsoch console enligt följande:

     {
         "name": "PowerShell cmdlets: pwsh",
         "type": "coreclr",
         "request": "launch",
         "preLaunchTask": "build",
         "program": "pwsh",
         "args": [
             "-NoExit",
             "-NoProfile",
             "-Command",
             "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll",
         ],
         "cwd": "${workspaceFolder}",
         "stopAtEntry": false,
         "console": "integratedTerminal"
     }
    

Fältet program används för att starta pwsh så att cmdleten som debugged kan köras. Argumentet -NoExit förhindrar att PowerShell-sessionen avslutas så snart modulen har importerats. Sökvägen i Import-Module argumentet är standardvägen för kompileringsutdata när du har följt handboken Skriva portabla moduler . Om du har skapat ett modulmanifest (.psd1 fil) bör du använda sökvägen till det i stället. Sökvägsavgränsaren / fungerar i Windows, Linux och macOS. Du måste använda den integrerade terminalen för att köra de PowerShell-kommandon som du vill felsöka.

Anteckning

Om felsökningsprogrammet inte stoppas vid några brytpunkter letar du upp en rad i Felsökningskonsolen för Visual Studio Code som säger:

Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.

Om du ser det här lägger du till "justMyCode": false i startkonfigurationen (på samma nivå som "console": "integratedTerminal".

Konfigurera launch.json för Windows PowerShell

Den här startkonfigurationen fungerar för att testa dina cmdletar i Windows PowerShell (powershell.exe). Skapa en andra startkonfiguration med följande ändringar:

  1. name bör vara PowerShell cmdlets: powershell

  2. type bör vara clr

  3. program bör vara powershell

    Den bör se ut så här:

     {
         "name": "PowerShell cmdlets: powershell",
         "type": "clr",
         "request": "launch",
         "preLaunchTask": "build",
         "program": "powershell",
         "args": [
             "-NoExit",
             "-NoProfile",
             "-Command",
             "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll",
         ],
         "cwd": "${workspaceFolder}",
         "stopAtEntry": false,
         "console": "integratedTerminal"
     }
    

Starta en felsökningssession

Nu är allt klart att börja felsöka.

  • Placera en brytpunkt i källkoden för den cmdlet som du vill felsöka:

    En brytpunkt visas som en röd punkt i rännstenen

  • Kontrollera att relevant PowerShell-cmdlets-konfiguration har valts i den nedrullningsbara konfigurationsmenyn i felsökningsvyn :

    Välj startkonfigurationen

  • Tryck på F5 eller klicka på knappen Starta felsökning

  • Växla till terminalfönstret och anropa din cmdlet:

    Anropa cmdleten

  • Körningen stoppas vid brytpunkten:

    Körningar stoppas vid brytpunkt

Du kan gå igenom källkoden, inspektera variabler och inspektera anropsstacken.

Avsluta felsökningen genom att klicka på Stoppa i verktygsfältet för felsökning eller trycka på Skift-F5. Gränssnittet som används för felsökning avslutar och frigör låset på den kompilerade DLL-filen.