Navegar pelo código com o depurador do Visual Studio

O depurador do Visual Studio pode ajudar você a navegar pelo código a fim de inspecionar o estado de um aplicativo e mostrar seu fluxo de execução, que também é conhecido como depuração passo a passo de código. Você pode usar atalhos de teclado, comandos de depuração, pontos de interrupção e outros recursos para acessar rapidamente o código que você quer examinar. Familiarize-se com os comandos e atalhos de navegação do depurador para encontrar e resolver problemas de aplicativo com mais rapidez e facilidade. Para obter uma lista dos atalhos de teclado mais comuns relacionados à navegação e depuração de código, confira a seção Depurar em Atalhos de teclado.

Observação

Se você não estiver familiarizado com a depuração de código, convém ler Depuração para iniciantes absolutos e Técnicas e ferramentas de depuração antes de ler este artigo.

Iniciar a depuração e entrar no modo de interrupção

Alguns comandos de navegação iniciam seu aplicativo e anexam automaticamente o depurador. Seu aplicativo pausa em uma linha de código específica com base no comando usado para iniciar a navegação e você entra no modo de interrupção (ou seja, seu aplicativo está pausado no depurador).

No modo de interrupção, a execução do aplicativo é suspensa enquanto funções, variáveis e objetos permanecem na memória. Quando o depurador estiver no modo de interrupção, você poderá navegar pelo código. Há duas maneiras muito comuns de entrar rapidamente no modo de interrupção:

Os comandos de etapa de código podem ser usados para iniciar seu aplicativo, mas são mais comumente usados depois que você entra no modo de interrupção.

Alguns comandos de navegação são usados principalmente no modo de interrupção (ou seja, enquanto você está em pausa no depurador).

Modo de depuração e interrupção

Quando você estiver no modo de interrupção, poderá usar vários comandos para navegar pelo código. Você pode examinar os valores das variáveis para procurar violações ou bugs. Para alguns tipos de projeto, você também pode fazer ajustes no aplicativo quando estiver no modo de interrupção.

A maioria das janelas do depurador, como as janelas Módulos e Inspeção, só fica disponível quando o depurador está anexado ao seu aplicativo. Alguns recursos do depurador, como exibir valores variáveis na janela Locais ou avaliar expressões na janela Inspeção, ficam disponíveis somente quando o depurador é pausado (ou seja, no modo de interrupção).

Observação

Se você interromper no código que não tem arquivos de origem ou símbolo (.pdb) carregados, o depurador exibirá uma página Arquivos de origem não encontrados ou Símbolos não encontrados que pode ajudar você a encontrar e carregar os arquivos. Confira Especificar arquivos de símbolo (.pdb) e de origem. Se não for possível carregar o símbolo ou os arquivos de origem, você ainda poderá depurar as instruções de assembly na janela Desmontagem.

Etapa de código

A etapa de código refere-se à execução do código do aplicativo uma instrução por vez, com o depurador anexado. Os comandos de etapa do depurador ajudam você a observar os efeitos de cada instrução e a descobrir mais sobre seu fluxo de execução.

Intervir no código

Para parar em cada instrução quando estiver depurando, use Depurar>Intervir ou selecione F11.

O depurador percorre as instruções de código, não linhas físicas. Por exemplo, uma cláusula if pode ser escrita em uma linha:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Mas quando você intervier nessa linha, o depurador tratará a condição como uma etapa e a consequência como outra. No exemplo anterior, a condição é verdadeira.

Em uma chamada de função aninhada, a Depuração Completa intervém na função aninhada mais profunda. Por exemplo, se você usar Intervir em uma chamada como Func1(Func2()), o depurador intervirá na função Func2.

Dica

Ao executar cada linha de código, você pode passar o mouse sobre variáveis para ver seus valores ou usar as janelas Locais e Inspeção para ver a alteração dos valores. Você também pode rastrear visualmente a pilha de chamadas enquanto intervém em funções. (Somente para Visual Studio Enterprise, confira Mapear métodos na pilha de chamadas durante a depuração.)

Percorrer o código e ignorar algumas funções

Talvez você não se importe com uma função durante a depuração. Também é possível que você saiba que um código funciona, como um código de biblioteca bem testado. Você pode usar os comandos a seguir para ignorar o código quando estiver depurando o código passo a passo. As funções ainda são executadas, mas o depurador as ignora.

Comando do teclado Comando do menu Depurar Descrição
F10 Contornar Se a linha atual contiver uma chamada de função, a Depuração Parcial executará o código e suspenderá a execução na primeira linha de código após o retorno da função chamada.
Shift+F11 Sair Sair continua executando o código e suspende a execução quando a função atual retorna. O depurador ignora a função atual.

Executar até um local ou a uma função específica

Talvez você prefira executar diretamente em um local ou função específica quando souber exatamente qual código deseja inspecionar ou se souber onde deseja iniciar a depuração.

  • Definir um ponto de interrupção é melhor se você acha que talvez queira reutilizar o ponto de interrupção.
  • Outros métodos são para conveniência e são semelhantes à configuração de um ponto de interrupção temporário.

Executar até um ponto de interrupção no código

Para definir um ponto de interrupção simples em seu código, selecione a margem da extrema esquerda ao lado da linha de código em que você deseja suspender a execução. Você também pode selecionar a linha e selecionar F9, selecionar Depurar>Alternar Ponto de Interrupção ou clicar com o botão direito do mouse e selecionar Ponto de Interrupção>Inserir Ponto de Interrupção. O ponto de interrupção aparece como um ponto vermelho na margem esquerda ao lado da linha de código. O depurador suspende a execução pouco antes da execução da linha.

Screenshot that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

Os pontos de interrupção no Visual Studio fornecem um conjunto avançado de funcionalidades adicionais, como pontos de interrupção e tracepoints condicionais. Para obter detalhes, confira Usando pontos de interrupção.

Executar até um ponto de interrupção de função

É possível definir o depurador para executar até atingir uma função específica. É possível especificar a função por nome ou escolhê-la na pilha de chamadas.

Para especificar um ponto de interrupção de função por nome:

  1. Selecione Depurar>Novo Ponto de Interrupção>Ponto de Interrupção da Função.

  2. Na caixa de diálogo Novo Ponto de Interrupção de Função, insira o nome da função e selecione o idioma:

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. Selecione OK.

Se a função estiver sobrecarregada ou em mais de um namespace, escolha a que você quiser na janela Pontos de interrupção:

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

Para selecionar um ponto de interrupção de função na pilha de chamadas:

  1. Durante a depuração, abra a janela Pilha de Chamadas selecionando Depurar>Windows>Pilha de Chamadas.

  2. Na janela Pilha de Chamadas, clique com o botão direito em uma função e selecione Executar até o Cursor ou selecione Ctrl+F10.

Para obter informações sobre como rastrear visualmente a pilha de chamadas, confira Mapear métodos na pilha de chamadas durante a depuração.

Executar até um local do cursor

Para executar até o local do cursor, no código-fonte ou na janela Pilha de Chamadas, selecione a linha em que você deseja intervir e clique com o botão direito e selecione Executar até o Cursor ou selecione Ctrl+F10. Selecionar Executar até o Cursor é semelhante a definir um ponto de interrupção temporário.

Forçar a execução até um local do cursor

Para executar até o local do cursor, no código-fonte ou na janela Pilha de Chamadas, selecione a linha em que você deseja intervir e clique com o botão direito e selecione Forçar Execução até o Cursor. Selecionar Forçar Executar até o Cursor ignorará quaisquer pontos de interrupção e exceções de primeira chance até que o depurador atinja a linha de código em que o cursor está localizado.

Executar com um clique

Com o depurador em pausa, você pode passar o mouse sobre uma instrução no código-fonte ou na janela Desmontagem e selecionar a seta verde Executar até aqui. O uso de Executar para clicar é semelhante à configuração de um ponto de interrupção temporário.

Screenshot that shows Run to Click and the green arrow.

Observação

Executar até Clicar está disponível a partir do Visual Studio 2017.

Forçar execução com um clique

Com o depurador em pausa, você pode passar o mouse sobre uma instrução no código-fonte enquanto pressiona a tecla Shift e, em seguida, selecionar Forçar execução até aqui (a seta verde dupla). Quando você escolhe essa opção, o aplicativo anexa o depurador do Visual Studio e pausa no local do cursor. Todos os pontos de interrupção e exceções de primeira chance encontrados durante a execução são temporariamente desabilitados.

Screenshot that shows Force Run to Click.

Observação

Forçar Executar até Clicar está disponível a partir do Visual Studio 2022.

Interromper manualmente o código

Para intervir na próxima linha de código disponível em um aplicativo em execução, selecione Depurar>Interromper Tudo ou selecione Ctrl+Alt+Interromper.

Depurar código que não é de usuário

Por padrão, o depurador tenta depurar apenas o código do aplicativo habilitando uma configuração chamada Apenas Meu Código. Para obter detalhes sobre como esse recurso funciona para vários tipos de projeto e linguagens e como você pode personalizá-lo, confira Apenas Meu Código.

Para examinar o código da estrutura, o código da biblioteca de terceiros ou as chamadas do sistema durante a depuração, você pode desabilitar a opção Apenas Meu Código. Em Ferramentas (ou Depurar) >Opções>Depuração, desmarque a caixa de seleção Habilitar Apenas Meu Código. Quando Apenas Meu Código estiver desabilitado, o código que não é de usuário aparecerá nas janelas do depurador, e o depurador poderá intervir no código que não é de usuário.

Observação

Apenas Meu Código não tem suporte para projetos de dispositivo.

Depurar código do sistema

Se você tiver carregado símbolos de depuração para o código do sistema Microsoft e desabilitado Apenas Meu Código, você poderá entrar em uma chamada do sistema assim como em qualquer outra.

A partir do Visual Studio 2022 versão 17.7, você pode descompilar automaticamente o código .NET ao entrar no código externo sem precisar carregar manualmente símbolos de depuração. Para mais informações, consulte Gere código-fonte de assemblies .NET durante a depuração.

Para saber mais sobre como carregar símbolos da Microsoft, confira Configurar o local dos arquivos de símbolo e as opções de carregamento.

Para carregar símbolos para um componente específico do sistema:

  1. Enquanto estiver depurando, abra a janela Módulos selecionando Depurar>Windows>Módulos ou pressionando Ctrl+Alt+U.

  2. Na janela Módulos, você pode informar quais módulos têm símbolos carregados na coluna Status do Símbolo. Clique com o botão direito no módulo para o qual você deseja carregar símbolos e selecione Carregar Símbolos.

Entrar em propriedades e operadores no código gerenciado

O depurador considera propriedades e operadores no código gerenciado por padrão. Na maioria dos casos, esse comportamento proporciona uma experiência de depuração superior. Para desabilitar a intervenção em propriedades ou operadores, selecione Depurar>Opções. Na página Depuração>Geral, desmarque a caixa de seleção Depurar parcialmente propriedades e operadores (Somente gerenciado).

Mova o ponteiro para alterar o fluxo de execução

Você pode alterar a próxima instrução que será executada movendo o ponteiro de execução amarelo. Você pode usar esse recurso enquanto estiver no modo de interrupção.

Esse é um recurso avançado do depurador. Para obter mais informações, confira Mover o ponteiro de execução.