Noções básicas sobre o depurador do .NET no Visual Studio
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 executar essas duas tarefas no Visual Studio.
Para começar, vamos aprender a usar o depurador do Visual Studio com o .NET.
Introdução ao Depurador do Visual Studio
Use o botão Iniciar (o triângulo verde sólido) na barra de comandos do Visual Studio para iniciar o aplicativo com o depurador anexado. Observe que a barra de comandos agora inclui o nome do projeto. Quando o aplicativo estiver em execução, mais ferramentas e recursos de depuração ficarão disponíveis.
- A configuração da solução especifica se o aplicativo deve ser executado no modo de Depuração ou de Versão
- A configuração da plataforma especifica uma plataforma de CPU de destino
- Inicia o aplicativo com o depurador anexado
- Inicia o aplicativo sem o depurador anexado
Controlando a execução
Depois que o aplicativo estiver em execução, os controles de depuração aparecerão ao lado do botão Iniciar que você clicou para iniciar o aplicativo.
- 1) Continuar ou pausar a execução. Se a execução for pausada em um ponto de interrupção, selecione esse botão para 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.
- 2) Controles de recarga dinâmica. Esse recurso, introduzido no Visual Studio 2022, permite que você faça alterações e atualize seu código sem reiniciar o aplicativo.
- 3) Parar. Esse botão interrompe o aplicativo em execução, o que também desanexa o depurador.
- 4) Reiniciar. Interrompe e inicia o aplicativo novamente com o depurador anexado.
- 5) Intervir. Se a próxima instrução for uma chamada de função, prossiga para a primeira instrução de código dessa função (o mesmo que o comando
step). - 6) Contornar. Se a próxima instrução for uma chamada de função, execute o código, mas vá imediatamente para a próxima linha de código na função atual.
- 7) 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).
Os pontos de interrupção são um dos principais recursos de depuração e integram-se a esses controles, portanto, vamos explorá-los com mais detalhes.
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 aplicativo com o depurador do Visual Studio anexado, o código começa a ser executado imediatamente. 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.
É possível adicionar um ponto de interrupção no Visual Studio clicando no lado esquerdo do número da linha em que você deseja aplicar a quebra de linha. 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 ou clicar com o botão direito do mouse em um ponto de interrupção existente, também poderá selecionar Adicionar Ponto de Interrupção Condicional. Esse tipo especial de ponto de interrupção permite definir uma condição ou critérios para quando o ponto de interrupção é disparado. Esse menu também permite que você selecione a opção Somente Habilitar quando o ponto de interrupção a seguir for atingido para criar uma execução de pontos de interrupção encadeáveis, entre outras ações.
Você também pode usar um ponto de interrupção temporário se quiser quebrar o código apenas uma vez. Você pode aplicar pontos de interrupção temporários clicando com o botão direito do mouse na coluna de ponto de interrupção e selecionando Inserir Ponto de Interrupção Temporário. Os pontos de interrupção temporários serão removidos depois de serem atingidos pela primeira vez.
Você também pode adicionar pontos de rastreamento clicando com o botão direito do mouse na coluna de ponto de interrupção e selecionando Inserir Tracepoint. Os tracepoints permitem registrar informações na janela “Saída” em condições configuráveis sem modificar nem interromper a execução do código.
Por fim, na janela Pontos de interrupção (Depurar>Windows>Pontos de interrupção), é possível ver e ativar todos os pontos de interrupção no 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.
Ferramentas depuração do Visual Studio
Depois de configurar os pontos de interrupção e iniciar o aplicativo, novas janelas de informações e controles aparecerão na tela.
- Controles de inicialização do depurador.
- O ponto de interrupção e a linha de execução atuais.
- Observe a janela para monitorar valores variáveis.
- Janela de pontos de interrupção para exibir todos os pontos de interrupção.
Também é possível acessar outras janelas de depuração úteis clicando em Depurar>Windows na barra de navegação superior. Por exemplo, entre as ferramentas comumente usadas estão as seguintes:
- Janela Pilha de chamadas: Permite que você exiba quais métodos foram chamados.
- Janela imediata: permite que você escreva e avalie expressões durante a depuração.
- Janela “Automáticos”: adiciona automaticamente inspeções a variáveis no contexto atual.
- Janela “Saída”: mostra a saída de instruções de log ou códigos gravados no console.
Inspecionar e editar o estado das variáveis
Ao analisar a causa de uma falha no programa, você pode inspecionar o estado das variáveis em busca de alterações inesperadas. Há várias opções de janela de inspeção no Visual Studio, que você pode usar em diferentes contextos de depuração para monitorar o estado das variáveis.
- Janela “Inspeção”: permite acompanhar variáveis e expressões selecionadas ao longo do tempo durante a depuração.
- Janela “Locais”: exibe automaticamente variáveis no escopo e no contexto da execução atual.
- Janela “Automáticos”: exibe automaticamente as variáveis usadas na linha atualmente em execução ou na linha anterior.
- Janela “Imediato”: permite avaliar expressões e variáveis em tempo real durante a depuração.
A maioria dessas janelas também permite clicar duas vezes no valor de uma variável e alterá-lo durante a depuração.
A janela Inspeção é útil para acompanhar variáveis durante a execução do código. É possível clicar com o botão direito do mouse em uma variável no editor e selecionar Adicionar para inspeção. Agora, essa variável é exibida na janela Inspeção e é atualizada automaticamente à medida que o aplicativo é executado.
Também é possível clicar com o botão direito do mouse em variáveis nas janelas Automáticos ou Locais para adicionar uma inspeção.
Outra maneira produtiva de exibir e analisar as informações da variável durante a depuração é usando Dicas de Dados. Quando estiver em uma pausa no ponto de interrupção, passe o mouse sobre qualquer variável no escopo atual. Uma Dica de Dados será exibida, mostrando o nome e o valor atual das propriedades da 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.
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 funções são chamadas dentro de outras funções várias vezes, a pilha de chamadas representa a trilha dessas chamadas.
É útil para localizar a origem de uma exceção. Se você enfrentar uma falha inesperada no programa, geralmente verá algo no console como o seguinte exemplo:
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. No entanto, ela pode ser um pouco difícil de decifrar, pois também inclui funções internas do runtime do .NET.
Nesse caso, a janela Pilha de chamadas do Visual Studio é útil. Ele filtra informações indesejadas para mostrar a você apenas as funções relevantes do seu próprio código por padrão. Em seguida, você pode descontrair essa pilha de chamadas para descobrir de onde a exceção se originou.
Na próxima unidade, você percorrerá um exercício usando o depurador para corrigir o bug no código Fibonacci que vimos anteriormente.
Especificar as configurações do depurador
No Visual Studio, você pode especificar várias configurações para o comportamento do depurador. Isso inclui como as variáveis são exibidas, se determinados avisos são apresentados, como os pontos de interrupção são definidos e como a interrupção afeta os programas em execução. Você também pode configurar o projeto para ser compilado como uma configuração de Depuração ou Versão.
Para definir as configurações do depurador, use o menu Ferramentas>Opções>Depuração, que fornece a você diferentes categorias de opções. As opções mais comuns estão na categoria Geral.