Uso di Visual Studio Code per il debug di cmdlet compilati
Questa guida illustra come eseguire il debug interattivo di codice sorgente C# per un modulo di PowerShell compilato usando Visual Studio Code (VS Code) e l'estensione C#.
Si presuppone una certa familiarità con il debugger di Visual Studio Code.
Per un'introduzione generale al debugger di VS Code, vedere Debug in Visual Studio Code.
Per esempi di debug di file di script e moduli di PowerShell, vedere Uso di Visual Studio Code per la modifica e il debug remoti.
In questa guida si presuppone che siano state lette e seguite le istruzioni riportate nella guida Scrittura di moduli portabili.
Creazione di un'attività di compilazione
Compilare automaticamente il progetto prima di avviare una sessione di debug. La ricompilazione consente di assicurarsi di eseguire il debug della versione più recente del codice.
Configurare un'attività di compilazione:
Nel riquadro comandi eseguire il comando Configure Default Build Task (Configura attività di compilazione predefinita).
Nella finestra di dialogo Select a task to configure (Seleziona un'attività da configurare) scegliere Create tasks.json file from template (Crea file tasks.json da modello).
Nella finestra di dialogo Select a Task Template (Seleziona modello di attività) scegliere .NET Core.
Viene creato un nuovo file tasks.json
se non ne esiste già uno.
Per testare l'attività di compilazione:
Nel riquadro comandi eseguire il comando Esegui attività di compilazione.
Nella finestra di dialogo Select the build task to run (Seleziona attività di compilazione da eseguire) scegliere build (compilazione).
Informazioni sui file DLL bloccati
Per impostazione predefinita, una compilazione riuscita non visualizza l'output nel riquadro del terminale. Se viene visualizzato output contenente il testo Project file doesn't exist (Il file di progetto non esiste), è necessario modificare il file tasks.json
. Includere il percorso esplicito del progetto C# espresso come "${workspaceFolder}/myModule"
. In questo esempio, myModule
è il nome della cartella del progetto. Questa voce deve seguire la voce build
nell'elenco args
come indicato di seguito:
{
"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"
}
Quando si esegue il debug, la DLL del modulo viene importata nella sessione di PowerShell nel terminale di VS Code. La DLL viene bloccata. Quando si esegue l'attività di compilazione senza chiudere la sessione del terminale, viene visualizzato il messaggio seguente:
Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.
Prima di eseguire la ricompilazione, è necessario chiudere le sessioni del terminale.
Configurazione del debugger
Per eseguire il debug del cmdlet di PowerShell, è necessario impostare una configurazione di avvio personalizzata. Questa configurazione viene usata per:
- Compilare il codice sorgente
- Avviare PowerShell con il modulo caricato
- Lasciare aperto PowerShell nel riquadro del terminale
Quando si richiama il cmdlet nella sessione del terminale, il debugger si arresta in corrispondenza di tutti i punti di interruzione impostati nel codice sorgente.
Configurazione di launch.json per PowerShell
Installare l'estensione C# per Visual Studio Code
Nel riquadro Debug aggiungere una configurazione di debug
Nella finestra di dialogo
Select environment
scegliere.NET Core
Il file
launch.json
viene aperto nell'editor. Con il cursore all'interno della matriceconfigurations
viene visualizzata la selezioneconfiguration
. Se questo elenco non viene visualizzato, selezionare Add Configuration (Aggiungi configurazione).Per creare una configurazione di debug predefinita, selezionare Launch .NET Core Console App (Avvia app console .NET Core):
Modificare i campi
name
,program
,args
econsole
come indicato di seguito:{ "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" }
Il campo program
viene usato per avviare pwsh
in modo che sia possibile eseguire il cmdlet di cui è in corso il debug. L'argomento -NoExit
impedisce la chiusura della sessione di PowerShell non appena viene importato il modulo.
Il percorso nell'argomento Import-Module
è il percorso dell'output di compilazione predefinito usato se è stata seguita la guida Scrittura di moduli portabili. Se è stato creato un manifesto del modulo (file .psd1
), è invece consigliabile usare il percorso di tale file. Il separatore di percorso /
funziona in Windows, Linux e macOS. Per eseguire i comandi di PowerShell di cui si vuole eseguire il debug, è necessario usare il terminale integrato.
Nota
Se il debugger non si arresta in corrispondenza di alcun punto di interruzione, verificare se è presente la riga seguente nella Console di debug di Visual Studio Code:
Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
In caso affermativo, aggiungere "justMyCode": false
alla configurazione di avvio, allo stesso livello di "console": "integratedTerminal"
.
Configurazione di launch.json per Windows PowerShell
Questa configurazione di avvio funziona per il test dei cmdlet in Windows PowerShell (powershell.exe
).
Creare una seconda configurazione di avvio con le modifiche seguenti:
name
dovrebbe esserePowerShell cmdlets: powershell
type
dovrebbe essereclr
program
dovrebbe esserepowershell
La cartella dovrebbe avere un aspetto simile a questo:
{ "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" }
Avvio di una sessione di debug
Ora tutto è pronto per iniziare il debug.
Inserire un punto di interruzione nel codice sorgente del cmdlet di cui si vuole eseguire il debug:
Un punto di interruzione viene visualizzato come punto rosso nella barra
Verificare che nel menu a discesa della configurazione sia selezionata la configurazione Cmdlet di PowerShell pertinente nella visualizzazione Debug:
Premere F5 oppure fare clic sul pulsante Avvia debug
Passare al riquadro del terminale e richiamare il cmdlet:
L'esecuzione si interrompe in corrispondenza del punto di interruzione:
Le esecuzioni si arrestano in corrispondenza del punto di interruzione
È possibile eseguire il codice sorgente un'istruzione alla volta, controllare le variabili ed esaminare lo stack di chiamate.
Per terminare il debug, fare clic su Arresta sulla barra degli strumenti di debug oppure premere MAIUSC+F5. La shell usata per il debug viene chiusa e rilascia il blocco sul file DLL compilato.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per