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....
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:
- 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.
- 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. - 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. - 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.