Aprenda dicas e truques de produtividade para o depurador no Visual Studio

Leia este tópico para aprender algumas dicas e truques de produtividade do depurador do Visual Studio. Para ver os recursos básicos do depurador, consulte Primeiro, examine o depurador. Neste tópico, abordaremos algumas áreas que não estão incluídas no tour de recursos.

Atalhos de teclado

Para obter uma lista dos atalhos de teclado mais comuns relacionados à depuração, confira a seção Depurar em Atalhos de teclado.

Fixar dicas de dados

Se você passa o mouse sobre dicas de dados com frequência durante a depuração, convém fixar a dica de dados da variável para ter acesso rápido a ela. A variável permanece fixada mesmo após a reinicialização. Para fixar a dica de dados, clique no ícone de alfinete enquanto passa o mouse sobre ela. É possível fixar mais de uma variável.

Fixando uma dica de dados

Você também pode personalizar dicas de dados de várias outras maneiras, por exemplo, mantendo uma dica de dados expandida (uma dica de dados autoadesiva) ou deixando uma dica de dados transparente. Para obter mais informações, consulte Exibir valores de dados em DataTips no editor de código.

Editar o código e continuar a depuração (C#, VB, C++)

Na maioria das linguagens com suporte do Visual Studio, você pode editar o código no meio de uma sessão de depuração e continuar a depuração. Para usar esse recurso, clique no 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.

Editar e continuar a depuração

Para saber mais sobre como usar o recurso e suas limitações, confira Editar e Continuar.

Editar código XAML e continuar a depuração

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

Depurar problemas difíceis de reproduzir

Se for difícil ou demorado recriar um estado específico no aplicativo, considere se o uso de um ponto de interrupção condicional pode ajudar. Você pode usar pontos de interrupção condicionais e filtrar pontos de interrupção para evitar interromper o código do aplicativo até que o aplicativo entre em um estado desejado (como um estado no qual uma variável está armazenando dados inválidos). É possível definir condições usando expressões, filtros, contagens de ocorrências e assim por diante.

Para criar um ponto de interrupção condicional

  1. Clique com o botão direito do mouse em um ícone de ponto de interrupção (a esfera vermelha) e escolha Condições.

  2. Na janela Configurações de Ponto de Interrupção, digite uma expressão.

    Ponto de interrupção condicional

  3. Se tiver interesse em outro tipo de condição, selecione Filtrar em vez de Expressão condicional na caixa de diálogo Configurações do Ponto de Interrupção e siga as dicas de filtragem.

Configurar os dados a serem mostrados no depurador

Para C#, Visual Basic e C++ (somente código C++/CLI), você pode informar ao depurador quais informações mostrar usando o atributo DebuggerDisplay. Para código C++, faça o mesmo usando visualizações do Natvis.

Anexar ao mesmo aplicativo repetidamente

Ao usar o recurso anexar ao processo, você pode reanexar rapidamente a um processo ao qual foi anexado anteriormente escolhendo Depurar>Reanexar ao Processo (Shift+Alt+P). Quando você escolher esse comando, o depurador tentará imediatamente se conectar ao último processo ao qual você se conectou, tentando primeiro corresponder ao ID do processo anterior e, se isso falhar, fazendo a correspondência com o nome do processo anterior. Se nenhuma correspondência for encontrada ou se vários processos tiverem o mesmo nome, a caixa de diálogo Anexar ao Processo será aberta para que você possa selecionar o processo correto.

Acompanhar um objeto fora do escopo (C#, Visual Basic)

É fácil exibir variáveis usando janelas do depurador como a janela Inspeção. No entanto, quando uma variável sai do escopo na janela Inspeção, talvez você note que ela está esmaecida. Em alguns cenários de aplicativo, o valor de uma variável pode mudar mesmo quando ela está fora do escopo, e talvez você queira observá-la atentamente (por exemplo, uma variável pode obter o lixo coletado). Você pode acompanhar a variável criando uma ID de objeto para ela na janela Inspeção.

Para criar uma ID de objeto

  1. Defina um ponto de interrupção próximo de uma variável que deseja acompanhar.

  2. Inicie o depurador (F5) e pare no ponto de interrupção.

  3. Localize a variável na janela Locais (Depurar > Janelas > Locais), clique com o botão direito do mouse na variável e selecione Tornar ID do Objeto.

    Criar uma ID de objeto

  4. Você verá um $ mais um número na janela Locais. Essa variável é a ID do objeto.

  5. Clique com o botão direito do mouse na variável de ID do objeto e escolha Adicionar Inspeção.

Para obter mais informações, confira Criar uma ID de Objeto.

Exibir valores retornados para funções

Para exibir valores retornados para suas funções, examine as funções que aparecem na janela Automáticos enquanto você percorre o código. Para ver o valor retornado de uma função, verifique se a função de seu interesse já foi executada (pressione F10 uma vez se você estiver parado na chamada de função). Se a janela estiver fechada, use Depurar > Janelas > Automáticos para abrir a janela Automáticos.

Janela Automáticos

Além disso, você pode inserir funções na janela Imediato para exibir valores retornados. (Abra-a usando Depurar > Janelas > Imediato.)

Janela Imediato

Você também pode usar pseudovariáveis na janela Inspeção e Imediato, como $ReturnValue.

Inspecionar cadeias de caracteres em um visualizador

Ao trabalhar com cadeias de caracteres, pode ser útil exibir toda a cadeia de caracteres formatada. Para exibir texto sem formatação, XML, HTML ou uma cadeia de caracteres JSON, clique no ícone de lupa VisualizerIcon enquanto passa o mouse sobre uma variável que contém um valor de cadeia de caracteres.

Abrir um visualizador de cadeia de caracteres

Um visualizador de cadeia de caracteres pode ajudar a descobrir se uma cadeia de caracteres está malformada dependendo do tipo de cadeia de caracteres. Por exemplo, um campo Valor em branco indica que a cadeia de caracteres não é reconhecida pelo tipo de visualizador. Para obter mais informações, consulte Caixa de diálogo Visualizador de Cadeia de Caracteres.

Visualizador de Cadeia de Caracteres JSON

Para alguns outros tipos, como objetos DataSet e DataTable que aparecem nas janelas do depurador, você também pode abrir um visualizador interno.

Analisar o uso de memória

Você pode tirar e comparar instantâneos do heap, otimizar o uso de memória e encontrar uma perda de memória usando ferramentas de uso de memória. Para obter mais informações, confira Escolher uma ferramenta de análise de memória.

Criar um arquivo de despejo

Um arquivo de despejo é um instantâneo que mostra o processo que estava em execução e os módulos que foram carregados para um aplicativo em um ponto no tempo. Um despejo com informações de heap também inclui um instantâneo da memória do aplicativo nesse ponto. Os despejos são usados principalmente para depurar problemas de computadores aos quais os desenvolvedores não têm acesso.

Se você precisar salvar um arquivo de despejo, selecione Depurar > Salvar Despejo Como.

Para analisar um arquivo de despejo, escolha Arquivo > Abrir no Visual Studio. Para iniciar a depuração usando o arquivo de despejo, selecione Depurar com Somente Gerenciado, Depurar com Somente Nativo, Depurar com Misto ou Depurar com Memória Gerenciada.

Para obter mais informações, confira Arquivos de despejo.

Entrar no código em exceções tratadas

O depurador entra no código em exceções sem tratamento. No entanto, exceções tratadas (como exceções que ocorrem dentro de um bloco try/catch) também podem ser uma fonte de bugs e talvez você queira investigar quando elas ocorrem. Você também pode configurar o depurador para entrar no código para exceções tratadas configurando as opções na caixa de diálogo Configurações de Exceção. Abra essa caixa de diálogo escolhendo Depurar > Janelas > Configurações de Exceção.

A caixa de diálogo Configurações de Exceção permite que você instrua o depurador a entrar no código em exceções específicas. Na ilustração abaixo, o depurador entra no código sempre que um System.NullReferenceException ocorre. Para saber mais, confira Gerenciando exceções.

Caixa de diálogo Configurações de Exceção

Alterar o fluxo de execução

Com o depurador pausado em uma linha de código, use o mouse para pegar o ponteiro de seta amarela à esquerda. Mova o ponteiro de seta amarela para um ponto diferente no caminho de execução de código. Em seguida, use F5 ou um comando de execução em etapa para continuar executando o aplicativo.

Mover o ponteiro de execução

Alterando o fluxo de execução, você pode fazer coisas como testar caminhos de execução de código diferentes ou executar novamente o código sem reiniciar o depurador. Para obter mais informações, confira Mover o ponteiro de execução.

Aviso

Geralmente, você precisa ter cuidado com esse recurso. Um aviso é exibido na dica de ferramenta. Outros avisos também podem ser exibidos. Mover o ponteiro não pode reverter o aplicativo para um estado do aplicativo anterior.

Depurar deadlocks e condições de corrida

Se você precisa depurar os tipos de problemas comuns a aplicativos multithread, geralmente é útil exibir o local dos threads durante a depuração. É possível fazer isso facilmente usando o botão Mostrar Threads na Origem.

Para mostrar threads no código-fonte:

  1. Durante a depuração, clique com no botão Mostrar Threads na OrigemMostrar Threads na Origem na barra de ferramentas Depurar.

  2. Examine a medianiz no lado esquerdo da janela. Nessa linha, você vê um ícone de marcador de threadMarcador de Thread que se assemelha a dois fios de linha. O marcador de thread indica que um thread está parado nesse local.

    Observe que um marcador de thread pode ser parcialmente oculto por um ponto de interrupção.

  3. Passe o ponteiro sobre o marcador de thread. Um DataTip aparece. O DataTip mostra o nome e o número de ID do thread para cada thread parado.

    Você também pode exibir o local dos threads na janela Pilhas Paralelas.

Familiarize-se mais com a maneira como o depurador é anexado ao seu aplicativo (C#, C++, Visual Basic, F#)

Para anexar ao aplicativo em execução, o depurador carrega arquivos de símbolo (.pdb) gerados exatamente para o mesmo build do aplicativo que você está tentando depurar. Em alguns cenários, algum conhecimento dos arquivos de símbolo pode ser útil. Você pode examinar como o Visual Studio carrega arquivos de símbolo usando a janela Módulos.

Abra a janela Módulos durante a depuração selecionando Depurar > Janelas > Módulos. A janela Módulos pode informar quais módulos o depurador está tratando como código de usuário, ou Meu Código, e o status de carregamento de símbolo do módulo. Na maioria dos cenários, o depurador localiza automaticamente arquivos de símbolo do código do usuário, mas se você quiser intervir (ou depurar) código .NET, código do sistema ou código de biblioteca de terceiros, etapas extras serão necessárias para obter os arquivos de símbolo corretos.

Exibir informações de símbolo na janela Módulos

Você pode carregar informações de símbolo diretamente da janela Módulos clicando com o botão direito do mouse e escolhendo Carregar Símbolos.

Às vezes, desenvolvedores de aplicativos fornecem aplicativos sem os arquivos de símbolo correspondentes (para reduzir o volume), mas mantêm uma cópia dos arquivos de símbolo correspondentes ao build para que possam depurar uma versão lançada mais tarde.

Para descobrir como o depurador classifica o código como código do usuário, consulte Apenas Meu Código. Para saber mais sobre arquivos de símbolo, consulte Especificar arquivos de símbolo (.pdb) e de origem no depurador do Visual Studio.

Saiba mais

Para obter dicas e truques adicionais e informações mais detalhadas, consulte estas postagens no blog:

Atalhos do teclado