Compartilhar via


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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.