Depurar exceções em aplicativos .NET usando o Depurador de Instantâneos

Quando habilitado, o Depurador de Instantâneos coleta automaticamente um instantâneo de depuração do código-fonte e das variáveis quando ocorre uma exceção em seu aplicativo .NET dinâmico. O Depurador de Instantâneos no Application Insights:

  • Monitora os logs gerados pelo sistema do aplicativo Web.
  • Coleta instantâneos das exceções mais geradas.
  • Fornece as informações necessárias para diagnosticar problemas na produção.

Saiba mais sobre os processos do Depurador de Instantâneos e do Carregador de Instantâneos.

Aplicativos e ambientes compatíveis

Esta seção lista os aplicativos e os ambientes com suporte.

Aplicativos

Coleta de instantâneo está disponível para:

Ambientes

Os ambientes a seguir são suportados:

Observação

Não há suporte para aplicativos cliente (por exemplo, WPF, Windows Forms ou UWP).

Pré-requisitos para usar o Depurador de Instantâneos

Pacotes e configurações

Permissões

Como funciona o Depurador de Instantâneos

O Depurador de Instantâneos é implementado como um Processador de telemetria do Application Insights. Quando o aplicativo é executado, o processador de telemetria do Depurador de Instantâneos é adicionado ao pipeline de logs gerados pelo sistema do aplicativo.

Importante

Os instantâneos podem conter dados pessoais ou outras informações confidenciais em valores de variável e parâmetro. Os dados de instantâneo são armazenados na mesma região que o recurso do Application Insights.

Processo do Depurador de Instantâneos

O processo do Depurador de Instantâneos começa e termina com o método TrackException. Um instantâneo de processo é um clone suspenso do processo em execução, para que os usuários experimentem pouca ou nenhuma interrupção. Em um cenário típico:

  1. Seu aplicativo lança o TrackException.

  2. O Depurador de Instantâneos monitora as exceções conforme elas são geradas assinando o evento AppDomain.CurrentDomain.FirstChanceException.

  3. Um contador é incrementado para a ID do problema.

    • Quando o contador alcançar o valor ThresholdForSnapshotting, a ID do problema será adicionada a um plano de coleta.

    Observação

    O valor mínimo padrão de ThresholdForSnapshotting é 1. Com esse valor, seu aplicativo precisa disparar a mesma exceção duas vezes antes que um instantâneo seja criado.

  4. A ID do problema do evento de exceção é computada e comparada com as IDs de problema no plano de coleção.

  5. Se houver uma correspondência entre as IDs do problema, será criado um instantâneo do processo em execução.

    • O instantâneo será atribuído a um identificador exclusivo e a exceção será marcada com esse identificador.

    Observação

    A taxa de criação de instantâneos é limitada pela configuração SnapshotsPerTenMinutesLimit. Por padrão, o limite é um instantâneo a cada 10 minutos.

  6. Depois que o manipulador FirstChanceException é retornado, a exceção gerada é processada normalmente.

  7. A exceção atinge o método TrackException novamente e é relatada ao Application Insights, juntamente com o identificador do instantâneo.

Observação

Defina IsEnabledInDeveloperMode como true se desejar gerar instantâneos durante a depuração no Visual Studio.

Processo do Carregador de Instantâneos

Enquanto o processo do Depurador de Instantâneos continua a ser executado e atende o tráfego aos usuários com pouca interrupção, o instantâneo é entregue ao processo do Carregador de Instantâneos. Em um cenário típico, o Carregador de Instantâneos:

  1. Cria um minidespejo.

  2. Carrega o minidespejo no Application Insights, juntamente com qualquer arquivo de símbolo relevante (.pdb).

Observação

Não é possível carregar mais de 50 instantâneos por dia.

Se você habilitou o Depurador de Instantâneos, mas não está vendo os instantâneos, confira o Guia de solução de problemas.

Atualizando o Depurador de Instantâneos

O Depurador de Instantâneos é atualizado automaticamente por meio da extensão de site interna e pré-instalada do Application Insights.

A adição manual de uma extensão de site do Application Insights para manter o Depurador de Instantâneos atualizado foi preterida.

Custos gerais indiretos

O Depurador de Instantâneos foi projetado para uso em ambientes de produção. As configurações padrão incluem limites de taxa para minimizar o impacto sobre os seus aplicativos.

No entanto, você pode experimentar uma pequena sobrecarga de CPU, memória e E/S associada ao Depurador de Instantâneos, como:

  • Quando uma exceção é lançada em seu aplicativo
  • Se o manipulador de exceção decidir criar um instantâneo
  • Quando TrackException é chamado

Não há nenhum custo adicional para armazenar dados capturados pelo Depurador de Instantâneos.

Veja cenários de exemplo nos quais você pode experimentar sobrecarga do Depurador de Instantâneos.

Limitações

Esta seção discute as limitações do Depurador de Instantâneos.

  • Retenção de dados

    Instantâneos aprimorados são armazenados por 15 dias. Essa política de retenção de dados padrão é definida para cada aplicativo. Se for necessário aumentar esse valor, você poderá solicitar o aumento abrindo um caso de suporte no portal do Azure. Para cada instância do Application Insights, um número máximo de 50 instantâneos é permitido por dia.

  • Publicar símbolos

    O Depurador de Instantâneos requer arquivos de símbolo no servidor de produção para:

    • Decodificar variáveis
    • Fornecer uma experiência de depuração no Visual Studio

    Por padrão, o Visual Studio 2017 versões 15.2+ publica símbolos para compilações de lançamento ao publicar no Serviço de Aplicativo.

    Nas versões anteriores, você deve adicionar a seguinte linha ao arquivo .pubxml de seu perfil de publicação para que os símbolos sejam publicados no modo de versão:

         <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
    

    Para a Computação do Azure e outros tipos, verifique se os arquivos de símbolo são:

    • Na mesma pasta do aplicativo principal .dll (normalmente, wwwroot/bin) ou
    • Disponível no caminho atual.

    Para obter mais informações sobre as diferentes opções de símbolo disponíveis, consulte a documentação do Visual Studio. Para obter melhores resultados, recomendamos usar Completo, Portátil ou Inserido.

  • Builds otimizados

    Em alguns casos, as variáveis locais não podem ser exibidas em builds de versão devido a otimizações aplicadas pelo compilador JIT.

    No entanto, no Serviço de Aplicativo, o Depurador de Instantâneos pode cancelar a otimização dos métodos de lançamento que fazem parte de seu plano de coleta.

    Dica

    Instale a extensão de site do Application Insights em sua instância do Serviço de Aplicativo para obter suporte de cancelamento de otimização.

Próximas etapas

Habilite o Depurador de Instantâneos do Application Insights em seu aplicativo: