Partilhar via


Solucionar problemas de pontos de interrupção no depurador do Visual Studio

Aplica-se a: Visual Studio

Avisos de ponto de interrupção

Durante a depuração, um ponto de interrupção tem dois estados visuais possíveis:

  • Um círculo vermelho sólido, se o depurador definir com êxito um ponto de interrupção no processo de destino.
  • Um círculo oco (cinza escuro ou branco preenchido, dependendo do tema), se o ponto de interrupção estiver desativado ou se ocorrer um aviso ao tentar definir o ponto de interrupção.

Para determinar a diferença, passe o mouse sobre o ponto de interrupção e veja se há um aviso. As duas seções a seguir descrevem avisos proeminentes e como corrigi-los.

"Nenhum símbolo foi carregado neste documento."

Navegue até Depurar>Módulos do Windows>durante a depuração e verifique se o módulo está carregado.

  • Se o módulo estiver carregado, verifique a coluna Status do Símbolo para ver se os símbolos foram carregados.
    • Se os símbolos não estiverem carregados, verifique o status do símbolo para diagnosticar o problema:

      Na janela Módulos, clique com o botão direito do mouse no módulo para o qual os símbolos não foram carregados e selecione Informações de carregamento de símbolos....

      Captura de tela das informações de carregamento de símbolo na janela Módulos.

      Para obter mais informações sobre como carregar símbolos, consulte Especificar arquivos de símbolo (.pdb) e de origem.

    • Se os símbolos forem carregados, o PDB não conterá informações sobre seus arquivos de origem. Algumas possíveis causas:

      • Se os arquivos de origem forem adicionados recentemente, confirme se uma versão atualizada do módulo está sendo carregada.
      • É possível criar PDBs extraídos usando a opção de vinculador /PDBSTRIPPED. PDBs extraídos não contêm informações de arquivo de origem. Confirme se você trabalha com um PDB completo e não com um PDB extraído.
      • O arquivo PDB está parcialmente corrompido. Exclua o arquivo e execute uma compilação limpa do módulo para tentar resolver o problema.
  • Se o módulo não estiver carregado, verifique o seguinte para encontrar a causa:
    • Confirme se você está depurando o processo certo.
    • Verifique se você está depurando o código certo. É possível descobrir o tipo de código do depurador que está configurado para depurar na janela Processos (Depurar>Windows>Processos). Por exemplo, se estiver tentando depurar o código C#, confirme se o depurador está configurado para o tipo e a versão apropriados do .NET (por exemplo, Gerenciado (v4*) versus Gerenciado (v2*/v3*) versus Gerenciado (CoreCLR)).

"… o código-fonte atual é diferente da versão interna..."

Se um arquivo de origem tiver sido alterado e a origem não corresponder mais ao código que está depurando, o depurador não definirá pontos de interrupção no código por padrão. Normalmente, esse problema ocorre quando um arquivo de origem é alterado, mas o código-fonte não foi recriado. Para corrigir esse problema, recompile o projeto. Se o sistema de compilação considerar que o projeto já está atualizado, mesmo que não esteja, é possível forçar o sistema de projetos para recompilar. Recompile o projeto ao salvar o arquivo de origem novamente ou limpar a saída de compilação antes de compilar.

Em raras situações, talvez você queira depurar sem ter o código-fonte correspondente. A depuração sem o código-fonte correspondente pode levar a uma experiência de depuração confusa, portanto, certifique-se de como deseja continuar.

Siga uma das opções para desabilitar estas verificações de segurança:

  • Para modificar um único ponto de interrupção, passe o mouse sobre o ícone de ponto de interrupção no editor e selecione o ícone de configurações (engrenagem). Uma janela de espiada é adicionada ao editor. Na parte superior da janela de espiada, há um hiperlink que indica o local do ponto de interrupção. Selecione o hiperlink que permita a modificação do local do ponto de interrupção e marque Permitir que o código-fonte seja diferente do original.
  • Para modificar essa configuração para todos os pontos de interrupção, acesseDepurar>Opções e Configurações. Na página Depuração/Geral, desmarque a opção Requer arquivos de origem que correspondem exatamente à versão original. Confirme de reativar essa opção quando terminar de depurar.

O ponto de interrupção foi definido com êxito (sem aviso), mas não foi atingido

Esta seção fornece informações para solucionar problemas quando o depurador não está exibindo avisos. O ponto de interrupção é um círculo vermelho sólido durante a depuração ativa, mas o ponto de interrupção não está sendo atingido.

Veja algumas verificações a fazer:

  1. Se o código for executado em mais de um processo ou mais de um computador, verifique se você está depurando o processo ou o computador correto.
  2. Confirme que seu código está em execução. Para testar se o código está em execução, adicione uma chamada para System.Diagnostics.Debugger.Break (C#/VB) ou __debugbreak (C++) à linha de código em que está tentando definir o ponto de interrupção e, em seguida, recompilar o projeto.
  3. Se você estiver depurando o código otimizado, verifique se a função em que o ponto de interrupção está definido não está sendo embutida em outra função. O teste Debugger.Break descrito na verificação anterior também pode funcionar para testar esse problema.
  4. Para anexar a cenários de processo , verifique se você está depurando o tipo certo de código (por exemplo, código de script versus .NET Framework versus .NET 5+). Para investigar, marque a opção Anexar ao na caixa de diálogo Anexar ao Processo e selecione Selecionar, se necessário, para alterar o tipo de código.

Excluí um ponto de interrupção, mas continuo a acertá-lo quando começar a depurar novamente

Se você excluiu um ponto de interrupção durante a depuração, poderá atingir o ponto de interrupção novamente na próxima vez que iniciar a depuração. Para parar de atingir esse ponto de interrupção, verifique se todas as instâncias do ponto de interrupção foram removidas da janela Pontos de Interrupção.