Compreender o depurador .NET no Visual Studio Code
Na unidade anterior, você aprendeu que um depurador ajuda você a controlar a execução do seu programa e observar seu estado. Nesta seção, você aprenderá como fazer essas duas tarefas no Visual Studio Code.
Vamos começar aprendendo como configurar o depurador de código do Visual Studio para usá-lo com o .NET.
Configurar o Visual Studio Code para depuração do .NET
Na primeira vez que você abrir um arquivo C# no Visual Studio Code, você receberá uma solicitação para instalar extensões recomendadas para C#.
O Visual Studio Code instalará a extensão C# e mostrará um prompt adicional para adicionar os ativos necessários para compilar e depurar o 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 você abre um arquivo C#, se ainda não o fez. Se você estiver tendo problemas para criar ou depurar seu aplicativo .NET no Visual Studio Code, deve verificar se seu projeto tem os ativos necessários para suporte à linguagem C#.
Pontos de interrupção
Como você aprendeu na unidade anterior, um depurador ajuda você a analisar e controlar a execução do seu programa. Quando você inicia o depurador de código do Visual Studio, ele imediatamente começa a executar seu código. Como seu código é executado rapidamente, você precisa ser capaz de pausar o programa em qualquer instrução. Você usará os 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 da linha na linha que você deseja quebrar. Você verá um círculo vermelho depois que o ponto de interrupção estiver ativado. Para removê-lo, selecione o círculo vermelho novamente.
Se clicar com o botão direito do rato para adicionar um ponto de interrupção, também pode 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 de código do Visual Studio
Depois de configurar os pontos de interrupção e iniciar o aplicativo, novos painéis de informações e controles aparecem na tela.
- Controles de inicialização do depurador
- Estado das variáveis
- Estado das variáveis monitoradas
- Pilha de chamadas atual
- Pontos de interrupção
- Controlos 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 arquivo
launch.json. Crie-o se precisar. - Abra o terminal de depuração.
Ver e editar o estado das variáveis
Quando você analisa a causa de um defeito do programa, observe o estado de suas 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ível a partir de qualquer lugar no seu programa. Os objetos de sistema do runtime do JavaScript também estão incluídos, por isso, não se surpreenda se vir muitas coisas lá.
- Variáveis de encerramento: Acessível a partir do encerramento atual, se for caso disso. Um fechamento combina o escopo local de uma função com o escopo da função externa à qual 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, você também pode espiar seu valor.
Observar variáveis
Pode ser tedioso procurar por um estado variável toda vez que você quiser rastreá-lo através do tempo ou de diferentes funções. É aí que o painel Watch é útil.
Você pode selecionar o botão Plus para inserir um nome de variável ou uma expressão para monitorizar. 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 dentro do painel de observação são atualizadas automaticamente à medida que o código é executado.
Pilha de chamadas
Sempre que o programa entra numa função, é adicionada uma entrada à pilha de chamadas. Quando a sua aplicação se torna complexa e tem funções chamadas dentro de funções muitas vezes, a pilha de chamadas representa o rastro das chamadas de funções.
É útil encontrar a fonte 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 de at [...] sob a mensagem de erro é chamado de stack trace. O rastreamento de pilha dá o nome e a origem de cada função que foi chamada antes de terminar com a exceção. Pode ser um pouco difícil de decifrar, porque também inclui funções internas do tempo de execução do .NET.
É aí que o painel de pilha de chamadas do Visual Studio Code é útil. Ele filtra informações indesejadas para mostrar apenas as funções relevantes do seu próprio código por padrão. Em seguida, você pode desenrolar essa pilha de chamadas para descobrir de onde a exceção se originou.
Painel Pontos de interrupção
No painel Pontos de interrupção, pode ver e alternar todos os pontos de interrupção colocados no seu código. Você também pode ativar/desativar opções para interromper exceções capturadas ou não capturadas. Você pode usar o painel Pontos de interrupção do para examinar o estado do programa e rastrear a origem de uma exceção usando a pilha de chamadas quando ocorrer.
Controlar a execução
Você pode controlar o fluxo de execução do seu 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 alterna para um botão de pausa que você pode usar para pausar a execução.
- Step over: Executa a próxima instrução de código no contexto atual.
-
Entrar em: Semelhante a Avançar por cima, mas se a próxima instrução for uma chamada de função, avança para a primeira instrução de código dessa função (tal como o comando
step). -
Saia: Se você estiver dentro de uma função, execute o código restante dessa função e volte para a instrução após a chamada de função inicial (igual ao comando
out). - Reiniciar: Reinicie o programa desde o início.
- Stop: Termine a execução e saia 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 .NET interno.
Você pode inserir uma expressão .NET no campo de entrada na parte inferior do console de depuração e, em seguida, 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 .NET porque o console de depuração não aceita entrada de terminal para um programa em execução.
Para manipular a entrada do terminal durante a depuração, você pode usar o terminal integrado (uma das janelas do Visual Studio Code) ou um terminal externo. Para este tutorial, você usa o terminal integrado.
Abra .vscode/launch.json.
Altere a configuração de
consoleparaintegratedTerminalde:"console": "internalConsole",Para:
"console": "integratedTerminal",Salve suas alterações.
Na próxima unidade, você aprenderá como usar o depurador para corrigir o bug no código de Fibonacci que vimos anteriormente.