Usando o Visual Studio Code para depurar cmdlets compilados
Este guia mostra como depurar interativamente o código-fonte C# para um módulo PowerShell compilado usando o Visual Studio Code (VS Code) e a extensão C#.
Alguma familiaridade com o depurador de código do Visual Studio é assumida.
Para obter uma introdução geral ao depurador VS Code, consulte Debugging in Visual Studio Code.
Para obter exemplos de depuração de arquivos de script e módulos do PowerShell, consulte Usando o Visual Studio Code para edição e depuração remotas.
Este guia pressupõe que você leu e seguiu as instruções no guia Escrevendo módulos portáteis.
Criando uma tarefa de compilação
Crie seu projeto automaticamente antes de iniciar uma sessão de depuração. A reconstrução garante que você depure a versão mais recente do seu código.
Configure uma tarefa de compilação:
Na Paleta de Comandos, execute o comando Configurar Tarefa de Compilação Padrão .
Na caixa de diálogo Selecione uma tarefa para configurar, escolha Criar tasks.json arquivo a partir do modelo.
Na caixa de diálogo Selecionar um Modelo de Tarefa, escolha .NET Core.
Um novo tasks.json
arquivo é criado se ainda não existir.
Para testar sua tarefa de compilação:
Na Paleta de Comandos, execute o comando Executar Tarefa de Compilação .
Na caixa de diálogo Selecione a tarefa de compilação para executar, escolha compilar.
Informações sobre arquivos DLL sendo bloqueados
Por padrão, uma compilação bem-sucedida não mostra a saída no painel do terminal. Se você vir que a saída que contém o arquivo de projeto de texto não existe, você deve editar o tasks.json
arquivo. Inclua o caminho explícito para o projeto C# expresso como "${workspaceFolder}/myModule"
. Neste exemplo, myModule
é o nome da pasta do projeto. Esta entrada deve seguir a build
entrada na args
lista da seguinte forma:
{
"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"
}
Durante a depuração, a DLL do módulo é importada para a sessão do PowerShell no terminal do VS Code. A DLL fica bloqueada. A seguinte mensagem é exibida quando você executa a tarefa de compilação sem fechar a sessão do terminal:
Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.
As sessões do terminal devem ser fechadas antes da reconstrução.
Configurando o depurador
Para depurar o cmdlet do PowerShell, você precisa configurar uma configuração de inicialização personalizada. Esta configuração é usada para:
- Crie o seu código-fonte
- Inicie o PowerShell com o módulo carregado
- Deixe o PowerShell aberto no painel de terminal
Quando você invoca seu cmdlet na sessão do terminal, o depurador para em qualquer ponto de interrupção definido no código-fonte.
Configurando o launch.json para PowerShell
Instalar a extensão C# for Visual Studio Code
No painel Depurar, adicione uma configuração de depuração
Select environment
Na caixa de diálogo, escolha.NET Core
O
launch.json
arquivo é aberto no editor. Com o cursor dentro daconfigurations
matriz, você vê oconfiguration
seletor. Se não vir esta lista, selecione Adicionar Configuração.Para criar uma configuração de depuração padrão, selecione Iniciar o aplicativo de console .NET Core:
Edite os
name
campos ,program
,args
e daconsole
seguinte maneira:{ "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" }
O program
campo é usado para iniciar pwsh
para que o cmdlet que está sendo depurado possa ser executado. O -NoExit
argumento impede que a sessão do PowerShell saia assim que o módulo é importado.
O caminho no argumento é o Import-Module
caminho de saída de compilação padrão quando você segue o guia Escrevendo módulos portáteis. Se você criou um manifesto de módulo (.psd1
arquivo), você deve usar o caminho para isso. O /
separador de caminho funciona em Windows, Linux e macOS. Você deve usar o terminal integrado para executar os comandos do PowerShell que deseja depurar.
Nota
Se o depurador não parar em nenhum ponto de interrupção, procure no Visual Studio Code Debug Console uma linha que diz:
Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Se você vir isso, adicione "justMyCode": false
à sua configuração de inicialização (no mesmo nível que "console": "integratedTerminal"
.
Configurando o launch.json para Windows PowerShell
Essa configuração de inicialização funciona para testar seus cmdlets no Windows PowerShell (powershell.exe
).
Crie uma segunda configuração de inicialização com as seguintes alterações:
name
deve serPowerShell cmdlets: powershell
type
deve serclr
program
deve serpowershell
Deverá ter o seguinte aspeto:
{ "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" }
Iniciando uma sessão de depuração
Agora tudo está pronto para começar a depuração.
Coloque um ponto de interrupção no código-fonte do cmdlet que você deseja depurar:
Um ponto de interrupção é mostrado como um ponto vermelho na calha
Verifique se a configuração relevante dos cmdlets do PowerShell está selecionada no menu suspenso de configuração na visualização Depurar:
Pressione F5 ou clique no botão Iniciar depuração
Alterne para o painel de terminal e invoque seu cmdlet:
A execução para no ponto de interrupção:
Você pode percorrer o código-fonte, inspecionar variáveis e inspecionar a pilha de chamadas.
Para encerrar a depuração, clique em Parar na barra de ferramentas de depuração ou pressione Shift+F5. O shell usado para depurar sai e libera o bloqueio no arquivo DLL compilado.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários