Resolver problemas de Pontos de Interrupção no Depurador do Visual Studio
Aplica-se a: Visual Studio 2022
Avisos de ponto de interrupção
Ao depurar, um ponto de interrupção tem dois estados visuais possíveis:
- Um círculo vermelho sólido, se o depurador tiver definido com êxito um ponto de interrupção no processo de destino.
- Um círculo oco (cinzento escuro ou branco preenchido, dependendo do seu 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, paire o cursor sobre o ponto de interrupção e veja se existe um aviso. As duas secções seguintes descrevem avisos proeminentes e como corrigi-los.
"Não foram carregados símbolos para este documento"
Aceda à janela Módulos (Depurar>Módulos doWindows>) ao depurar e verifique se o módulo está carregado.
- Se o módulo estiver carregado, verifique a coluna Estado do Símbolo para ver se os símbolos foram carregados.
- Se os símbolos não forem carregados, verifique o estado do símbolo para diagnosticar o problema. No menu de contexto de um módulo na janela Módulos , selecione Informações de Carregamento de Símbolos... para ver onde o depurador procurou experimentar e carregar símbolos. Para obter mais informações sobre o carregamento de símbolos, veja Especificar Símbolo (.pdb) e Ficheiros de Origem.
- Se os símbolos forem carregados, o PDB não contém informações sobre os seus ficheiros de origem. Algumas causas possíveis são:
- Se os ficheiros de origem foram adicionados recentemente, confirme que está a ser carregada uma versão atualizada do módulo.
- É possível criar PDBs removidos com a opção /PDBSTRIPPED linker. Os PDBs removidos não contêm informações de ficheiro de origem. Confirme que está a trabalhar com um PDB completo e não com um PDB despido.
- O ficheiro PDB está parcialmente danificado. Elimine o ficheiro 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 que está a depurar o processo certo.
- Verifique se está a depurar o código certo. Pode descobrir que tipo de código o depurador está configurado para depurar na janela Processos (Depurar>Processos doWindows>). Por exemplo, se estiver a tentar depurar código C#, confirme que o depurador está configurado para o tipo e versão adequados do .NET (por exemplo, Gerido (v4*) versus Gerido (v2*/v3*) versus Gerido (CoreCLR)).
"… o código fonte atual é diferente da versão incorporada..."
Se um ficheiro de origem tiver sido alterado e a origem já não corresponder ao código que está a depurar, o depurador não definirá pontos de interrupção no código por predefinição. Normalmente, este problema ocorre quando um ficheiro de origem é alterado, mas o código fonte não foi reconstruído. Para corrigir este problema, recrie o projeto. Se o sistema de compilação considerar que o projeto já está atualizado, mesmo que não esteja, pode forçar a reconstrução do sistema de projetos. Recrie o projeto ao guardar novamente o ficheiro de origem ou ao limpar a saída da compilação antes de criar.
Em cenários raros, poderá querer depurar sem ter código fonte correspondente. A depuração sem código fonte correspondente pode levar a uma experiência de depuração confusa, por isso, certifique-se de que pretende continuar.
Siga uma das opções para desativar estas verificações de segurança:
- Para modificar um único ponto de interrupção, paire o cursor sobre o ícone de ponto de interrupção no editor e selecione o ícone de definições (engrenagem). É adicionada uma janela de pré-visualização ao editor. Na parte superior da janela de pré-visualização, existe uma hiperligação que indica a localização do ponto de interrupção. Selecione a hiperligação para permitir a modificação da localização do ponto de interrupção e selecione Permitir que o código fonte seja diferente do original.
- Para modificar esta definição para todos os pontos de interrupção, aceda aOpções e Definições de Depuração>. Na página Depuração/Geral , desmarque a opção Exigir ficheiros de origem que correspondam exatamente à versão original . Certifique-se de que reativa esta opção quando terminar a depuração.
O ponto de interrupção foi definido com êxito (sem aviso), mas não foi atingido
Esta secção fornece informações para resolver problemas quando o depurador não está a apresentar avisos – o ponto de interrupção é um círculo vermelho sólido enquanto depura ativamente, mas o ponto de interrupção não está a ser atingido.
Seguem-se alguns aspetos a verificar:
- Se o código for executado em mais do que um processo ou em mais do que um computador, certifique-se de que está a depurar o processo ou computador correto.
- Confirme que o 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 onde está a tentar definir o ponto de interrupção e, em seguida, recrie o projeto. - Se estiver a depurar código otimizado, certifique-se de que a função em que o ponto de interrupção está definido não está a ser inlineada noutra função. O
Debugger.Break
teste descrito na verificação anterior também pode funcionar para testar este problema. - Para anexar a cenários de processo, confirme que está a depurar o tipo de código correto (por exemplo, código de script versus .NET Framework versus .NET 5+). Para investigar, selecione a opção Anexar a na caixa de diálogo Anexar ao Processo e selecione Selecionar, se necessário, para alterar o tipo de código.
Eliminei um ponto de interrupção, mas continuo a atingi-lo quando começo a depurar novamente
Se tiver eliminado um ponto de interrupção durante a depuração, poderá voltar a atingir o ponto de interrupção da próxima vez que começar a depurar. Para parar de atingir este ponto de interrupção, certifique-se de que todas as instâncias do ponto de interrupção são removidas da janela Pontos de interrupção.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de