Compartilhar via


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

Leia este tópico para saber algumas dicas e truques de produtividade para o depurador do Visual Studio. Para obter uma olhada nos recursos básicos do depurador, consulte Primeiro examinar o depurador. Neste assunto, abordamos áreas que não estão incluídas no passeio pelas funcionalidades.

Atalhos do teclado

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

Fixar dicas de dados

Se você passar o mouse com frequência sobre dicas de dados durante a depuração, talvez queira fixar a dica de dados da variável para ter acesso rápido. A variável permanece fixada mesmo após a reinicialização. Para fixar a dica de dados, clique no ícone de fixação enquanto passa o mouse sobre ela. Você pode fixar várias variáveis.

Fixando uma dica de dados

Você também pode personalizar dicas de dados de outras maneiras, como manter uma dica de dados expandida (uma dica de dados fixa) ou tornar uma dica de dados transparente. Para obter mais informações, consulte Exibir valores de dados em DataTips no editor de código.

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

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, F10ou F11 para continuar a depuração.

Editar e continuar a depuração

Para obter mais informações sobre como usar o recurso e sobre limitações de recursos, consulte Editar e Continuar.

Edite o código XAML e continue 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 o XAML Hot Reload.

Depure problemas que são difíceis de reproduzir

Se for difícil ou demorado recriar um estado específico em seu 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 invadir o código do aplicativo até que o aplicativo insira um estado desejado (como um estado no qual uma variável está armazenando dados incorretos). Você pode 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 do Ponto de Interrupção , digite uma expressão.

    Ponto de interrupção condicionalPonto

  3. Se você estiver interessado 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 filtro.

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++, você pode fazer o mesmo usando visualizações natvis.

Anexar ao mesmo aplicativo repetidamente

Quando você estiver usando o recurso de anexar a processo, pode reanexar rapidamente a um processo ao qual estava anteriormente anexado escolhendo Depurar>Reanexar ao Processo (Shift+Alt+P). Quando você escolher esse comando, o depurador tentará se conectar imediatamente ao último processo ao qual você se conectou, tentando corresponder primeiro à ID do processo anterior e, se isso falhar, pelo 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 de depurador como a janela Monitoramento. No entanto, quando uma variável sai do escopo na janela Watch, você pode notar que ela está esmaecida. Em alguns cenários de aplicativo, o valor de uma variável pode mudar mesmo quando está fora do escopo, e você pode querer observá-la de perto (por exemplo, uma variável pode ser coletada como lixo). 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 perto de uma variável que você deseja rastrear.

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

  3. Localize a variável na janela Locais (Depurar > Locais do Windows>), clique com o botão direito do mouse na variável e selecione Criar 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 Assistência.

Para obter mais informações, consulte 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 Autos enquanto você está percorrendo seu código. Para ver o valor retornado de uma função, verifique se a função em que você está interessado já foi executada (pressione F10 uma vez se você estiver parado na chamada de função). Se a janela estiver fechada, use Depurar > Windows > Autos para abrir a janela Autos .

Janela de Autos

Além disso, você pode inserir funções na janela Imediata para exibir valores retornados. (Abra-o usando Depurar > o Windows > Immediate.)

Immediate Window

Você também pode usar pseudovariáveis nas janelas 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 visualizar um texto sem formatação, XML, HTML ou 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 ajudá-lo 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 a caixa de diálogo Visualizador de Cadeia de Caracteres.

Visualizador de cadeia de caracteres

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 da memória

Você pode tirar e comparar instantâneos do heap, otimizar o uso da memória e encontrar um vazamento dela usando ferramentas de análise de uso de memória. Para obter mais informações, consulte 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 sendo executado e os módulos que foram carregados para uma aplicação em um momento. Um despejo com informações da heap também inclui um instantâneo da memória do aplicativo nesse ponto. Os dumps são usados principalmente para depurar problemas de máquinas às 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 Abrir Arquivo > no Visual Studio. Para iniciar a depuração usando o arquivo de despejo, selecione Depurar com Somente Gerenciado, Depurar com Somente Nativo, Depurar com Mixed ou Depurar com Memória Gerenciada.

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

Interromper no código em exceções manipuladas

O depurador interrompe a execução do seu código em exceções não tratadas. No entanto, exceções tratadas (como exceções que ocorrem dentro de um try/catch bloco) também podem ser uma fonte de bugs e talvez você queira investigar quando elas ocorrem. Você pode configurar o depurador para também interromper a execução do 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 > Configurações de Exceção do Windows>.

A caixa de diálogo Configurações de Exceção permite que você informe ao depurador para interromper a execução do código em exceções específicas. Na ilustração abaixo, o depurador entra no seu código sempre que ocorre um System.NullReferenceException. Para obter mais informações, consulte 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 do código. Em seguida, use F5 ou um comando de etapa para continuar executando o aplicativo.

Mover o ponteiro de execução

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

Aviso

Freqüentemente, você precisa ter cuidado com esse recurso e vê um aviso no tooltip. Você também pode ver outros avisos. Mover o ponteiro não pode reverter seu aplicativo para um estado de aplicativo anterior.

Depurar deadlocks e condições de competição

Se você precisar depurar os tipos de problemas comuns aos aplicativos multithreaded, geralmente ajuda a exibir o local dos threads durante a depuração. Você pode fazer isso facilmente usando o botão Mostrar Tópicos na Origem.

Para mostrar threads no código-fonte:

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

  2. Examine a medianiz no lado esquerdo da janela. Nessa linha, você verá um ícone de marcador de fioThread Marker que se assemelha a dois fios de tecido. O marcador de thread indica que um thread é interrompido neste local.

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

  3. Passe o ponteiro sobre o marcador de thread. Uma Dica de Dados é exibida. A DataTip informa o nome e o número da ID de thread para cada thread parado.

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

Aprofunde-se em como o depurador se conecta ao seu aplicativo (C#, C++, Visual Basic, F#)

Para anexar ao seu aplicativo em execução, o depurador carrega arquivos de símbolo (.pdb) gerados para exatamente a mesma build do aplicativo que você está tentando depurar. Em alguns cenários, um pouco de 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 > Módulos do Windows>. 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 para o módulo. Na maioria dos cenários, o depurador localiza automaticamente arquivos de símbolo para o 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, os desenvolvedores de aplicativos enviam aplicativos sem os arquivos de símbolo correspondentes (para reduzir o volume), mas mantêm uma cópia dos arquivos de símbolo correspondentes para o build para que possam depurar uma versão lançada mais tarde.

Para descobrir como o depurador classifica o código como código de usuário, consulte Just My Code. Para saber mais sobre arquivos de símbolo, consulte Especificar símbolo (.pdb) e arquivos 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 de teclado