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.
En allmän introduktion till VS Code-felsökningsprogrammet finns i Felsökning i Visual Studio Code.
Exempel på felsökning av PowerShell-skriptfiler och -moduler finns i Använda Visual Studio Code för fjärrredigering och felsökning.
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:
Kör kommandot Configure Default Build Task (Konfigurera standardversionsuppgift) på kommandopaletten.

I dialogrutan Välj en uppgift att konfigurera väljer du Skapa tasks.json-fil från mallen.
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:
Kör kommandot Run Build Task (Kör build-uppgift) på kommandopaletten.
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
Installera tillägget C# för Visual Studio Code
Lägg till en felsökningskonfiguration i felsökningsfönstret
Select environmentI dialogrutan väljer du.NET CoreFilen
launch.jsonöppnas i redigeraren. Med markören inuti matrisenconfigurationsser du väljarenconfiguration. Om du inte ser den här listan väljer du Lägg till konfiguration.Om du vill skapa en standardkonfiguration för felsökning väljer du Starta .NET Core-konsolapp:

Redigera fälten
name,program,argsochconsoleenligt 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:
namebör varaPowerShell cmdlets: powershelltypebör varaclrprogrambör varapowershellDen 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:

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

Tryck på F5 eller klicka på knappen Starta felsökning
Växla till terminalfönstret och anropa din cmdlet:

Körningen stoppas vid brytpunkten:

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.