Introdução ao Depurador do Visual Studio

Este tópico apresenta as ferramentas de depurador fornecidas pelo Visual Studio. No contexto do Visual Studio, quando você depura seu aplicativo, significa que você está executando o aplicativo com o depurador anexado (ou seja, no modo de depurador). Quando você faz isso, o depurador fornece várias maneiras de mostrar o que o código está fazendo enquanto é executado. Você pode percorrer seu código e examinar os valores armazenados em variáveis, definir relógios em variáveis para ver quando os valores mudam, você pode examinar o caminho de execução do código, et al. Se esta for a primeira vez que você tentou depurar o código, talvez queira ler Depuração para iniciantes absolutos antes de passar por este tópico. Se você estiver tentando executar uma tarefa específica e precisar saber qual recurso usar, confira Localizador de Recursos do Depurador. Para experimentar a depuração assistida por IA, confira Depurar com o Copilot.

Os recursos descritos aqui são aplicáveis a C#, C++, Visual Basic, JavaScript e a outras linguagens compatíveis com o Visual Studio (exceto quando indicado).

Definir um ponto de interrupção e iniciar o depurador

Os pontos de interrupção são um recurso útil quando você sabe qual linha ou seção de código deseja examinar em detalhes no runtime. Para obter informações sobre os diferentes tipos de pontos de interrupção, como pontos de interrupção condicionais e pontos de interrupção de função, confira Como usar pontos de interrupção.

Para depurar, você precisa iniciar o aplicativo com o depurador anexado ao processo do aplicativo. Para fazer isso:

  • Pressione F5 (Depurar > Iniciar Depuração), que é o método mais comum.

No entanto, talvez você ainda não definiu pontos de interrupção para examinar o código do seu aplicativo, portanto faremos isso primeiro e, em seguida, iniciaremos a depuração. Pontos de interrupção são o recurso mais básico e essencial da depuração confiável. Um ponto de interrupção indica quando o Visual Studio deve suspender o código em execução para que você possa examinar os valores das variáveis ou o comportamento de memória ou se uma ramificação de código está sendo executada ou não.

Se você tem um arquivo aberto no editor de código, é possível definir um ponto de interrupção clicando na margem à esquerda de uma linha de código.

Definir um ponto de interrupção

Definir um ponto de interrupção

Pressione F5 (Depurar > Iniciar depuração) ou o botão Iniciar depuraçãoIniciar depuração na barra de ferramentas de Depuração e o depurador executa o primeiro ponto de interrupção que ele encontra. Se o aplicativo ainda não estiver em execução, F5 iniciará o depurador e o interromperá no primeiro ponto de interrupção.

Nós fornecemos os atalhos de teclado para a maioria dos comandos porque eles tornam a navegação pelo código do aplicativo mais rápida. (Comandos equivalentes, como comandos de menu, são mostrados entre parênteses.) Para obter mais detalhes sobre como usar os comandos de etapa, consulte Navegar pelo código no depurador.

Para iniciar seu aplicativo com o depurador anexado, pressione F11 (Depurar > Intervir). F11 é o comando Intervir, que avança a execução do aplicativo uma instrução por vez. Quando você inicia o aplicativo com F11, o depurador é interrompido na primeira instrução que é executada.

F11 Intervir

F11 Intervir

A seta amarela representa a instrução na qual o depurador ficou em pausa, que também suspende a execução do aplicativo no mesmo ponto (essa instrução ainda não foi executada).

F11 é uma boa maneira de examinar o fluxo de execução com o máximo de detalhes. (Para mover-se mais rapidamente por meio do código, mostramos também algumas outras opções.) Por padrão, o depurador ignora o código que não é de usuário (se você quiser mais detalhes, consulte Apenas Meu Código).

Observação

No código gerenciado, você verá uma caixa de diálogo perguntando se deseja ser notificado quando passar automaticamente por propriedades e operadores (comportamento padrão). Se você quiser alterar a configuração depois, desabilite a configuração Passar por propriedades e operadores no menu Ferramentas>Opções em Depuração.

Passar pelo código para ignorar funções

Quando você estiver em uma linha de código que é uma chamada de função ou de método, poderá pressionar F10 (Depurar > Intervir) em vez de F11.

Pressionar F10 avança o depurador sem intervir em funções ou métodos no código do aplicativo (o código ainda é executado). Ao pressionar F10, será possível ignorar o código no qual você não está interessado. Dessa forma, você poderá chegar rapidamente no código que está mais interessado. Para obter mais detalhes sobre como usar os comandos de etapa, consulte Navegar pelo código no depurador.

Executar rapidamente até um ponto no código usando o mouse

O uso do botão Executar para clicar é semelhante à configuração de um ponto de interrupção temporário. Esse comando também é útil para percorrer rapidamente uma região visível do código do aplicativo. Você pode usar Executar com um Clique em qualquer arquivo aberto. Para obter mais detalhes sobre esse recurso e recursos de navegação semelhantes, consulte Executar para um local específico em seu código.

Enquanto estiver no depurador, passe o mouse sobre uma linha de código até o botão Executar para Clicar (Executar execução até aqui) Captura de tela do botão Executar para Clicar do Depurador do Visual Studio. O botão indica que a execução deve ser executada até a linha em que o botão é colocado. aparece à esquerda.

Captura de tela do Depurador do Visual Studio mostrando o botão Executar para Clicar aparecendo à esquerda de uma chamada para uma função.

Captura de tela do Depurador do Visual Studio mostrando o botão Executar para Clicar aparecendo à esquerda de uma chamada para uma função.

Observação

O botão Executar com um Clique (Realizar a execução até aqui) está disponível no Visual Studio 2017 em diante.

Clique no botão Executar com um Clique (Realizar a execução até aqui). O depurador avança até a linha de código em que você clicou.

Avançar o depurador para fora da função atual

Às vezes, talvez você queira continuar a sessão de depuração, avançando o depurador até o fim da função atual.

Pressione Shift + F11 (ou Depurar > Sair).

Este comando retoma a execução do aplicativo (e avança o depurador) até que a função atual retorne.

Executar até o cursor

Quando você estiver editando o código (em vez de pausado no depurador), clique com o botão direito do mouse em uma linha de código em seu aplicativo e escolha Executar para Cursor (ou pressione Ctrl + F10). Esse comando inicia a depuração e define um ponto de interrupção temporário na linha de código atual. Para obter mais detalhes sobre esse recurso e recursos de navegação semelhantes, consulte Executar para um local específico em seu código.

Executar até o cursor

Executar até o cursor

Se você tiver definido pontos de interrupção, o depurador parará no primeiro ponto de interrupção que encontrar.

Pressione F5 até alcançar a linha de código em que você selecionou Executar até o Cursor.

Esse comando é útil quando você está editando o código e deseja definir rapidamente um ponto de interrupção temporário e iniciar o depurador ao mesmo tempo.

Observação

Você pode usar Executar até o Cursor na janela Pilha de Chamadas enquanto está depurando.

Reinicie o aplicativo rapidamente

Clique no botão ReiniciarReiniciar aplicativo na barra de ferramentas de depuração (ou pressione Ctrl + Shift + F5).

Ao pressionar Reiniciar, você economiza tempo em comparação com a opção de parar o aplicativo e reiniciar o depurador. O depurador é pausado no primeiro ponto de interrupção que é atingido pela execução do código.

Se você quiser parar o depurador e voltar para o editor de código, poderá pressionar a o botão de parada vermelho Parar Depuração em vez de Reiniciar.

Edição dinâmica de código

O Visual Studio 2022 dá suporte à edição dinâmica de código durante a depuração. Para obter informações detalhadas, veja:

Edite seu código e continue a depuração (C#, VB, C++, XAML)

Na maioria dos idiomas compatíveis com o Visual Studio, você pode editar seu código no meio de uma sessão de depuração e continuar a depuração. Para usar esse recurso, clique em seu código com o cursor enquanto estiver em pausa no depurador, faça edições e pressione F5, F10 ou F11 para continuar a depuração. Para saber mais sobre como usar esse recurso e suas limitações, confira Editar e Continuar.

Editar e continuar a depuração

Para modificar o código XAML durante uma sessão de depuração, consulte Escrever e depurar o código XAML em execução com Recarga Dinâmica XAML.

Inspecionar variáveis com dicas de dados

Agora que você sabe um pouco mais sobre a navegação, é uma boa oportunidade começar a inspecionar o estado do aplicativo (variáveis) com o depurador. Os recursos que permitem que você inspecione variáveis são alguns dos mais úteis do depurador e há diferentes maneiras de fazer isso. Muitas vezes, ao tentar depurar um problema, você tenta descobrir se as variáveis estão armazenando os valores que elas deveriam conter em um estado específico do aplicativo. Para obter informações detalhadas sobre como usar dicas de dados, consulte Exibir valores de dados em dicas de dados.

Com o depurador em pausa, passe o mouse sobre um objeto com o mouse e você verá seu valor ou o valor da sua propriedade padrão.

Exibir uma dica de dados

Exibir uma dica de dados

Se a variável tiver propriedades, você poderá expandir o objeto para ver todas as suas propriedades.

Muitas vezes, durante a depuração, queremos uma maneira rápida de verificar valores de propriedade em objetos e as dicas de dados são uma ótima maneira de fazer isso.

Inspecionar variáveis com as janelas Autos e Locais

Na janela Autos, veja as variáveis, bem como seus valores atuais e os respectivos tipos. A janela Autos mostra todas as variáveis usadas na linha atual ou na linha anterior (No C++, a janela mostra as variáveis nas três linhas de código anteriores. Verifique a documentação sobre o comportamento específico da linguagem. Para obter mais informações sobre como usar essas janelas, consulte Inspecionar variáveis nas janelas Autos e Locais.

Durante a depuração, examine a janela Autos na parte inferior do editor de códigos.

Janela Autos

Janela Autos

Observação

Em JavaScript, há compatibilidade com a janela Locais, mas não com a janela Autos.

Em seguida, examine a janela Locais. A janela Locais mostra as variáveis que estão no escopo no momento.

Janela Locais

Janela Locais

Neste exemplo, o objeto this e o objeto f estão no escopo. Para obter mais informações, confira Inspecionar variáveis nas janelas Locais e Autos.

Definir uma inspeção

Você pode usar uma janela Inspeção para especificar uma variável (ou uma expressão) que deseja acompanhar. Para obter informações detalhadas, consulte Definir uma inspeção usando o Watch e o QuickWatch Windows.

Durante a depuração, clique com o botão direito do mouse em um objeto e escolha Adicionar Inspeção.

Janela de inspeção

Janela de inspeção

Neste exemplo, há uma inspeção definida no objeto e você pode ver seu valor sendo alterado, conforme percorre o depurador. Ao contrário das outras janelas de variáveis, a janela Inspeção sempre mostra as variáveis que você está inspecionando (eles ficam esmaecidas quando estão fora do escopo).

Examinar a pilha de chamadas

A janela Pilha de Chamadas mostra a ordem em que os métodos e as funções são chamados. A linha superior mostra a função atual. A segunda linha mostra a função ou propriedade da qual ela foi chamada e assim por diante. A pilha de chamadas é uma boa maneira de examinar e entender o fluxo de execução de um aplicativo. Para obter informações detalhadas, confira Como examinar a pilha de chamadas.

Observação

A janela Pilha de Chamadas é semelhante à perspectiva de Depuração em alguns IDEs, como o Eclipse.

Clique na janela Pilha de Chamadas durante a depuração, a qual fica aberta por padrão no painel inferior direito.

Examinar a pilha de chamadas

Examinar a pilha de chamadas

Você pode clicar duas vezes em uma linha de código para examinar esse código-fonte. Isso também altera o escopo atual que está sendo inspecionado pelo depurador. Isso não avança o depurador.

Você também pode usar os menus acessados ao clicar com o botão direito do mouse na janela Pilha de Chamadas para fazer outras coisas. Por exemplo, você pode inserir pontos de interrupção em funções especificas, reiniciar o aplicativo usando Executar até o Cursor e examinar o código-fonte.

Inspecionar uma exceção

Quando seu aplicativo gera uma exceção, o depurador leva você até a linha de código que lançou a exceção. Para obter informações detalhadas, consulte Inspecionar uma exceção usando o Auxiliar de Exceção.

Auxiliar de exceção

Neste exemplo, o Auxiliar de exceção mostra uma exceção System.NullReferenceException e uma mensagem de erro que diz que a referência de objeto não está definida como uma instância do objeto. E ele nos informa que o valor da cadeia de caracteres era nulo quando você tentou chamar o método Trim.

Auxiliar de Exceção

Neste exemplo, o Auxiliar de Exceção mostra uma exceção System.Argument e uma mensagem de erro que diz que o caminho não é um formato válido. Portanto, sabemos que o erro ocorreu em um método ou um argumento de função.

Neste exemplo, a chamada DirectoryInfo gerou o erro na cadeia de caracteres vazia armazenada na variável value.

O Auxiliar de Exceção é um ótimo recurso que pode ajudá-lo a depurar erros. Você também pode fazer coisas como exibir detalhes do erro e adicionar uma inspeção por meio do Auxiliar de Exceção. Ou, se necessário, você pode alterar as condições para lançar a exceção específica. Para obter mais informações de como tratar exceções no código, confira Técnicas e ferramentas de depuração.

Expanda o nó Configurações de Exceção para ver mais opções de como lidar com esse tipo de exceção, mas você não precisa alterar nada neste tour!

Dica

Caso tenha o Copilot, você pode obter ajuda de IA ao depurar exceções. Basta procurar o botão Perguntar ao CopilotCaptura de tela do botão Perguntar ao Copilot.. Para obter mais informações, consulte Depurar com o Copilot.

Configurar a depuração

Você pode configurar seu projeto para compilar como uma configuração de Depuração ou Versão, configurar propriedades do projeto para depuração ou definir configurações gerais para depuração. Além disso, você pode configurar o depurador para exibir informações personalizadas usando recursos como o atributo DebuggerDisplay ou, para C/C++, a estrutura NatVis.

As propriedades de depuração são específicas para cada tipo de projeto. Por exemplo, você pode especificar um argumento para passar para o aplicativo ao iniciá-lo. Você pode acessar as propriedades específicas do projeto clicando com o botão direito do mouse no projeto em Gerenciador de Soluções e selecionando Propriedades. As propriedades de depuração normalmente aparecem na guia Compilar ou Depurar , dependendo do tipo de projeto específico.

A partir do Visual Studio 2022, a guia Depurar para projetos .NET fornece um link para a interface do usuário de perfis de inicialização de depuração, na qual você pode definir propriedades relacionadas à depuração.

Propriedades do projeto

Propriedades do projeto

Depurar aplicativos ASP.NET dinâmicos no Serviço de Aplicativo do Azure

Para depurar em Serviço de Aplicativo do Azure, consulte Depurar aplicativos do Azure.

No Visual Studio Enterprise (somente), o Depurador de Instantâneos tira um instantâneo de seus aplicativos em produção quando o código no qual você está interessado é executado. Para instruir o depurador a tirar um instantâneo, defina snappoints e logpoints em seu código. O depurador permite ver exatamente o que deu errado sem afetar o tráfego do seu aplicativo de produção. O Depurador de Instantâneo pode ajudar a reduzir drasticamente o tempo que leva para resolver problemas que ocorrem em ambientes de produção.

Iniciar o depurador de instantâneos

A coleção de instantâneos está disponível para aplicativos do ASP.NET em execução no Serviço de Aplicativo do Azure. Aplicativos ASP.NET devem estar em execução no .NET Framework 4.6.1 ou posterior e os aplicativos ASP.NET Core devem ser executados no .NET Core 2.0 ou posterior no Windows.

Para obter mais informações, confira Depurar aplicativos ASP.NET dinâmicos usando o Depurador de Instantâneos.

Exibir instantâneos com o retrocesso do IntelliTrace (Visual Studio Enterprise)

O retrocesso do IntelliTrace tira automaticamente um instantâneo do seu aplicativo em cada evento de etapa do depurador e do ponto de interrupção. Os instantâneos registrados permitem retornar aos pontos de interrupção ou às etapas anteriores e exibir o estado do aplicativo como ele era no passado. O retrocesso do IntelliTrace poderá poupar seu tempo quando você desejar ver o estado do aplicativo anterior, mas não desejar reiniciar a depuração nem recriar o estado do aplicativo desejado.

É possível navegar e exibir instantâneos usando os botões Voltar e Avançar na barra de ferramentas Depurar. Esses botões navegam pelos eventos exibidos na guia Eventos na janela Ferramentas de Diagnóstico.

Botões Voltar e Avançar Etapa

Para obter mais informações, confira a página Inspecionar estados anteriores do aplicativo usando o IntelliTrace.

Depurar problemas de desempenho

Se o aplicativo for executado muito lentamente ou usar muita memória, talvez seja necessário testar seu aplicativo com as ferramentas de criação de perfil no início. Para obter mais informações sobre ferramentas de criação de perfil, como a ferramenta de Uso da CPU e o Analisador de Memória, confira Primeiro contato com as ferramentas de criação de perfil.

Neste tutorial, você obteve uma visão rápida de muitos recursos do depurador. Talvez você deseje fazer uma análise mais detalhada de uma dessas funcionalidades, como pontos de interrupção.