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:
- .NET Framework 4.6.2 e versões mais recentes.
- .NET 6.0 ou posterior no Windows.
Ambientes
Os ambientes a seguir são suportados:
- Serviço de Aplicativo do Azure
- Azure Functions
- Serviços de Nuvem do Azure com a família de SO 4 ou posterior
- Azure Service Fabric em execução no Windows Server 2012 R2 ou posterior
- Máquinas Virtuais do Azure e Conjuntos de Dimensionamento de Máquinas Virtuais do Microsoft Azure que executam o Windows Server 2012 R2 ou posterior
- Máquinas locais virtuais ou físicas executando Windows Server 2012 R2 ou posterior; ou Windows 8.1 ou posterior
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
- Incluir o pacote NuGet Snapshot Collector em seu aplicativo.
- Configurar os parâmetros de coleta em
ApplicationInsights.config
.
Permissões
- Verifique se você foi adicionado à função de Depurador de Instantâneos do Application Insights para o Instantâneo do Application Insights de destino.
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:
Seu aplicativo lança o
TrackException
.O Depurador de Instantâneos monitora as exceções conforme elas são geradas assinando o evento
AppDomain.CurrentDomain.FirstChanceException
.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.- Quando o contador alcançar o valor
A ID do problema do evento de exceção é computada e comparada com as IDs de problema no plano de coleção.
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.Depois que o manipulador
FirstChanceException
é retornado, a exceção gerada é processada normalmente.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:
Cria um minidespejo.
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: