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 Capturas no Application Insights:

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

Aplicativos e ambientes compatíveis

Aplicativos

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

Ambientes

O Snapshot Debugger oferece suporte aos seguintes ambientes:

Observação

Não há suporte para aplicativos cliente, como WPF, Windows Forms ou UWP.

Pré-requisitos para o Depurador de Instantâneos

Pacotes e configurações

Permissões

Como funciona o Depurador de Instantâneos

O Depurador de Instantâneo funciona como um processador de telemetria do Application Insights. Quando seu aplicativo é executado, o processador de telemetria do Snapshot Debugger passa a integrar o pipeline de logs gerados pelo sistema do seu aplicativo.

Importante

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

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 do processo é um clone suspenso do processo em execução. Seus usuários experimentam pouca ou nenhuma interrupção. Em um cenário típico:

  1. Seu aplicativo gera uma exceção e o relata ao Application Insights chamando o TrackException método.

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

  3. O Depurador de instantâneos incrementa o contador do ID do problema.

    Quando o contador atinge o valor ThresholdForSnapshotting, o Snapshot Debugger adiciona o ID do problema 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 o Depurador de Instantâneo crie um instantâneo.

  4. O Depurador de Instantâneos calcula o identificador do problema do evento de exceção e o compara aos identificadores de problema no plano de coleta.

  5. Se houver uma correspondência entre IDs de problema, o Depurador de Instantâneos criará um instantâneo do processo em execução.

    O depurador de instantâneos atribui ao instantâneo um identificador exclusivo e marca a exceção com esse identificador.

    Observação

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

  6. Depois que o manipulador FirstChanceException retorna, seu aplicativo processa a exceção lançada normalmente.

  7. A exceção chega ao método TrackException novamente, que a informa ao Application Insights, juntamente com o identificador do instantâneo.

Observação

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

Processo do Carregador de Instantâneos

Embora o processo do Depurador de Instantâneos continue em execução e atendendo às solicitações dos usuários com pouca interrupção, ele transfere o instantâneo para o processo do Carregador de Instantâneos. Em um cenário típico, o Carregador de Instantâneos:

  1. Cria um minidespejo.

  2. Envia o minidump para o Application Insights, juntamente com quaisquer arquivos de símbolos relevantes (.pdb).

Observação

O Carregador de Instantâneos pode carregar no máximo 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.

Atualizar o Depurador de Instantâneos

As atualizações automáticas do Depurador de Instantâneos são feitas por meio da extensão de site integrada e pré-instalada do Application Insights.

A adição manual de uma extensão de site do Application Insights para manter o Snapshot Debugger atualizado foi descontinuada.

Sobrecarga do Depurador de Instantâneos

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 Snapshot Debugger, como:

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

Não há nenhum custo adicional para armazenar os dados que o Depurador de Instantâneo captura.

Veja cenários de exemplo nos quais você pode enfrentar sobrecarga do Snapshot Debugger.

Otimizações de código

Se o Depurador de Instantâneos capturar instantâneos do seu aplicativo, você poderá ver informações relacionadas sobre exceções na visão geral consolidada de Otimizações de Código.

Limitações do Depurador de Instantâneos

O Depurador de Instantâneos tem as seguintes limitações:

  • Retenção de dados

    Instantâneos de depuração são armazenados por 15 dias. Essa política de retenção de dados padrão é definida para cada aplicativo. Para aumentar esse valor, abra um caso de suporte no portal do Azure. Cada instância do Application Insights permite um máximo de 50 instantâneos 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ão 15.2 ou posterior publica símbolos para builds de lançamento ao realizar a publicação para o 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 Azure Compute e outros tipos, verifique se os arquivos de símbolo são:

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

    Para obter mais informações sobre as opções de símbolo disponíveis, consulte a documentação do Visual Studio. Para obter melhores resultados, use Full, Portable ou Embedded.

  • Compilações otimizadas

    Em alguns casos, você não pode exibir variáveis locais em builds de versão porque o compilador JIT aplica otimizações.

    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 do Site do Application Insights em sua instância de App Service para obter suporte de desotimização.

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