Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 do VS Code, consulte Debugging in Visual Studio Code.
Para obter exemplos de depuração de arquivos e módulos de script do PowerShell, consulte Usando o Visual Studio Code para edição remota e depuração.
Este guia pressupõe que o utilizador leu e seguiu as instruções no guia Writing Portable Modules.
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 Construção Padrão.
Na caixa de diálogo Selecione uma tarefa para configurar, escolha Criar arquivo tasks.json a partir do modelo.
Na caixa de diálogo Selecionar um Modelo de Tarefa, escolha .NET Core.
Um novo arquivo tasks.json é criado se ainda não existir.
Para testar sua tarefa de compilação:
No Command Palette, execute o comando Run Build Task.
Na caixa de diálogo Selecione a tarefa de compilação a ser executada, escolha compilação.
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 vires que a saída contém o texto o ficheiro do projeto não existe, deves editar o ficheiro tasks.json. 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 ir após a entrada build na lista de args 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 Visual Studio 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 de serem reconstruídas.
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
Instale o C# para Visual Studio Code extensão
No painel Depurar, adicione uma configuração de depuração
Na caixa de diálogo
Select environment, escolha.NET CoreO arquivo
launch.jsoné aberto no editor. Com o cursor dentro da matrizconfigurations, você vê o seletor deconfiguration. Se não vir esta lista, selecione Adicionar configuração.Para criar uma configuração de depuração padrão, selecione "Launch .NET Core Console App":
Edite os campos
name,program,argseconsoleda 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 campo program é usado para iniciar pwsh, para que o cmdlet a ser depurado possa ser executado. O argumento -NoExit impede que a sessão do PowerShell saia assim que o módulo é importado.
O caminho no argumento Import-Module é o caminho de saída de compilação padrão se seguir o guia Writing Portable Modules. Se criares um manifesto de módulo (arquivo.psd1), deverás usar o caminho para isso. O separador de caminho / funciona no Windows, Linux e macOS. Você deve usar o terminal integrado para executar os comandos do PowerShell que deseja depurar.
Observação
Se o depurador não parar em nenhum ponto de interrupção, procure na Consola de Depuração do Visual Studio Code 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".
A Configuração do launch.json para o 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:
namedeve serPowerShell cmdlets: powershelltypedeve serclrprogramdeve serpowershellDeve ter a seguinte aparência:
{ "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 aparece como um ponto vermelho na calha
Certifique-se de que os cmdlets configuração relevantes do PowerShell estejam selecionados no menu suspenso de configuração na exibição de depuração do:
Pressione F5 ou clique no botão Iniciar Depuração
Mude para o painel de terminal e invoque o seu cmdlet.
A execução é interrompida no ponto de paragem:
Você pode percorrer o código-fonte, verificar variáveis e analisar a pilha de chamadas.
Para terminar a depuração, clique em Parar na barra de ferramentas de depuração ou pressione Shift+F5. O shell utilizado para a depuração sai e libera o bloqueio no ficheiro DLL compilado.