Entender o depurador .NET no Visual Studio Code
Na unidade anterior, você viu que um depurador ajuda a controlar a execução do programa e observar seu estado. Nesta seção, você aprenderá a realizar ambas as tarefas no Visual Studio Code.
Vamos começar aprendendo a configurar o depurador do Visual Studio Code para usá-lo com o .NET.
Configurar o Visual Studio Code para a depuração do .NET
Na primeira vez que você abrir um arquivo C# no Visual Studio Code, receberá um prompt para instalar as extensões recomendadas para o C#.
O Visual Studio Code instalará a extensão C# e mostrará um prompt adicional para adicionar ativos necessários para compilar e depurar seu projeto.
Observação
O suporte à linguagem C# no Visual Studio Code é uma instalação opcional do Marketplace. O Visual Studio Code solicita automaticamente que você instale essa extensão quando abrir um arquivo C# se ainda não tiver feito isso. Se você estiver tendo problemas para criar ou depurar seu aplicativo .NET no Visual Studio Code, verifique se o projeto tem os ativos necessários para o suporte à linguagem C#.
Pontos de interrupção
Como você viu na unidade anterior, o depurador ajuda a analisar e controlar a execução do programa. Quando você inicia o depurador do Visual Studio Code, ele começa imediatamente a executar seu código. Como o código é executado de modo rápido, você precisa ser capaz de pausar o programa em qualquer instrução. Você usará pontos de interrupção para fazer isso.
Você pode adicionar um ponto de interrupção no Visual Studio Code clicando no lado esquerdo do número de linha na linha que deseja interromper. Você verá um círculo vermelho quando o ponto de interrupção estiver habilitado. Para removê-lo, basta clicar no círculo vermelho novamente.
Se você clicar com o botão direito do mouse para adicionar um ponto de interrupção, também poderá selecionar Adicionar Ponto de Interrupção Condicional. Esse tipo especial de ponto de interrupção permite que você insira uma condição para interromper a execução. Esse ponto de interrupção só estará ativo quando a condição especificada for atendida. Você também pode modificar um ponto de interrupção existente clicando com o botão direito do mouse nele e selecionando Editar Ponto de Interrupção.
Visão geral do depurador do Visual Studio Code
Depois de configurar seus pontos de interrupção e iniciar seu aplicativo, novos painéis de informações e controles aparecem na tela.
- Controles de inicialização do depurador
- Estado de variáveis
- Estado de variáveis observadas
- Pilha de chamadas atual
- Pontos de interrupção
- Controles de execução
- Etapa de execução atual
- Console de depuração
Controles de inicialização do depurador
Na parte superior da barra lateral, você pode encontrar os controles de inicialização:
- Inicie a depuração.
- Selecione a configuração de inicialização ativa.
- Edite o
launch.json
arquivo. Crie um se precisar. - Abra o terminal de depuração.
Exibir e editar o estado das variáveis
Ao analisar a causa de um defeito de programa, observe o estado das variáveis para procurar alterações inesperadas. Você pode usar o painel Variáveis para fazer isso.
Suas variáveis são mostradas organizadas por escopo:
- Variáveis locais: acessíveis no escopo atual, geralmente a função atual.
- Variáveis globais: acessíveis de todos os lugares em seu programa. Os objetos do sistema do ambiente de execução JavaScript também estão incluídos, portanto, não se surpreenda se você vir muitos elementos lá.
- Variáveis de fechamento: acessíveis a partir do fechamento atual, se houver. Um fechamento combina o escopo local de uma função com o escopo da função externa à qual ela pertence.
Você pode desdobrar escopos e variáveis selecionando a seta. Ao desdobrar objetos, você pode ver todas as propriedades definidas no objeto.
É possível alterar o valor de uma variável em tempo real clicando duas vezes na variável.
Ao passar o mouse sobre um parâmetro de função ou uma variável diretamente na janela do editor, também é possível conferir o valor deles.
Monitorar variáveis
Pode ser entediante pesquisar um estado variável sempre que você quiser rastreá-lo no tempo ou em funções diferentes. É aí que o painel Monitoramento é útil.
Você pode selecionar o botão Plus para inserir um nome de variável ou uma expressão a ser observado. Como alternativa, você pode clicar com o botão direito do mouse em uma variável no painel Variáveis e selecionar Adicionar para assistir.
Todas as expressões no painel de relógio são atualizadas automaticamente conforme o código é executado.
Pilha de chamadas
Toda vez que o programa entra em uma função, uma entrada é adicionada à pilha de chamadas. Quando o aplicativo se torna complexo e você tem funções sendo chamadas dentro de outras funções repetidas vezes, a pilha de chamadas representa a trilha das chamadas de funções.
Ela é útil para localizar a origem de uma exceção. Se você tiver uma falha inesperada em seu programa, muitas vezes verá algo no console como o exemplo a seguir:
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9
O grupo de linhas at [...]
abaixo da mensagem de erro é chamado de rastreamento de pilha. O rastreamento de pilha informa o nome e a origem de cada função chamada antes da exceção. Pode ser um pouco difícil de decifrar, pois também inclui funções internas do runtime do .NET.
É aí que o painel Pilha de chamadas do Visual Studio Code é útil. Ele filtra informações indesejadas para mostrar a você apenas as funções relevantes do seu próprio código por padrão. Você pode então desenrolar essa pilha de chamadas para descobrir de onde a exceção foi originada.
Painel pontos de interrupção
No painel Breakpoints, você pode ver e ativar ou desativar todos os pontos de interrupção colocados em seu código. Você também pode alternar entre as opções para interromper em exceções capturadas ou não capturadas. Use o painel Pontos de interrupção para examinar o estado do programa e rastrear a origem de uma exceção, se uma ocorrer, usando a Pilha de chamadas.
Controlar a execução
Você pode controlar o fluxo de execução do programa usando esses controles.
Da esquerda para a direita, os controles são:
- Continuar ou pausar a execução: se a execução for pausada, ela continuará até que o próximo ponto de interrupção seja atingido. Se o programa estiver em execução, o botão alternará para um botão pausar que você pode usar para pausar a execução.
- Passo a passo: Executa a próxima instrução de código no contexto atual.
-
Entrar: como Passar por cima, mas se a próxima instrução for uma chamada de função, vá para a primeira instrução de código dessa função (igual ao comando
step
). -
Sair: Se você estiver dentro de uma função, execute o código restante dela e volte para a instrução após a chamada de função inicial (o mesmo que o comando
out
). - Reinicie: reinicie seu programa desde o início.
- Parar: encerrar a execução e sair do depurador.
Usar o console de depuração
Você pode mostrar ou ocultar o console de depuração selecionando Ctrl+Shift+Y para Windows e Linux. Selecione Cmd+Shift+Y para Mac. Você pode usar o console de depuração para visualizar os logs do console do aplicativo. Você também pode usá-lo para avaliar expressões ou executar código no conteúdo de execução atual, como comandos ou nomes de variáveis no depurador interno do .NET.
Você pode inserir uma expressão .NET no campo de entrada na parte inferior do console de depuração e selecionar Enter para avaliá-la. O resultado é exibido diretamente no console.
Usando o console de depuração, você pode verificar rapidamente um valor de variável, testar uma função com valores diferentes ou alterar o estado atual.
Observação
Embora o console de depuração seja muito útil para executar e avaliar o código .NET, ele pode ser um pouco confuso quando você está tentando executar ou depurar um aplicativo do Console do .NET porque o console de depuração não aceita entrada de terminal para um programa em execução.
Para lidar com a entrada de dados do terminal durante a depuração de código, você pode usar o terminal integrado (uma das janelas do Visual Studio Code) ou um terminal externo. Para este tutorial, você usará o terminal integrado.
Abra .vscode/launch.json.
Altere a configuração
console
paraintegratedTerminal
de:"console": "internalConsole",
Para:
"console": "integratedTerminal",
Salve suas alterações.
Na próxima unidade, você aprenderá a usar o depurador para corrigir o bug no código Fibonacci que vimos anteriormente.