Compartilhar via


Diagnóstico no .NET

O software nem sempre se comporta como você esperaria, mas o .NET tem ferramentas e APIs que ajudarão você a diagnosticar esses problemas de forma rápida e eficaz.

A implantação AOT nativa é um modelo de aplicativo que está disponível desde o .NET 7. Para obter informações sobre o suporte de diagnóstico do .NET 8 para aplicativos AOT nativos, consulte o diagnóstico de AOT nativo.

Este artigo ajuda você a encontrar as várias ferramentas necessárias.

Depuradores

Os depuradores permitem que você interaja com seu programa. Pausar, executar, examinar e retomar incrementalmente fornece informações sobre o comportamento do código. Um depurador é uma boa opção para diagnosticar problemas funcionais que podem ser reproduzidos facilmente.

Geradores

Os profilers permitem que você analise o desempenho do programa. Você pode coletar dados sobre uso de memória, uso da CPU e outras métricas para diagnosticar e entender problemas de desempenho.

Instrumentação para observabilidade

O .NET dá suporte a técnicas de instrumentação padrão do setor usando métricas, logs e rastreamentos distribuídos, comumente conhecidos como os três pilares da observabilidade.

Instrumentação é um código que é adicionado a um projeto de software para registrar o que ele está fazendo. Essas informações podem ser coletadas em arquivos, bancos de dados ou na memória e analisadas para entender como um programa de software está operando. Isso geralmente é usado em ambientes de produção para monitorar problemas e diagnosticá-los. O runtime do .NET tem instrumentação interna que pode ser opcionalmente habilitada e APIs que permitem adicionar instrumentação personalizada especializada para seu aplicativo.

Logs

O registro em log é uma técnica em que o código é instrumentado para produzir um log, um registro de eventos interessantes que ocorreram durante a execução do programa. Geralmente, um conjunto de linha de base de eventos de log é configurado por padrão e um registro em log mais extenso pode ser habilitado sob demanda para diagnosticar problemas específicos. A sobrecarga de desempenho é variável dependendo da quantidade de dados que está sendo registrada.

Para a maioria dos casos, seja a adição de log a um projeto existente ou a criação de um novo projeto, a infraestrutura do ILogger é uma boa opção padrão. ILogger dá suporte a log estruturado rápido, configuração flexível e uma coleção de coletores comuns , incluindo o console, que é o que você vê ao executar um aplicativo ASP.NET. Além disso, a ILogger interface também pode servir como uma fachada em relação a muitas implementações de log de terceiros que oferecem funcionalidade avançada e extensibilidade.

Métricas

As métricas são medidas numéricas registradas ao longo do tempo para monitorar o desempenho e a integridade do aplicativo. As métricas geralmente são usadas para gerar alertas quando possíveis problemas são detectados. As métricas têm uma sobrecarga de desempenho muito baixa e muitos serviços as configuram como telemetria sempre ativa. As exceções geralmente são registradas como métricas e podem ser resumidas para reduzir a cardinalidade dos dados. Para obter mais informações, consulte Resumo de exceção.

Rastreamentos distribuídos

O Rastreamento Distribuído é uma forma especializada de registro em log que ajuda a localizar falhas e problemas de desempenho em aplicativos distribuídos em vários computadores ou processos. Essa técnica rastreia solicitações por meio de um aplicativo correlacionando o trabalho em conjunto feito por diferentes componentes do aplicativo e separando-o de outros trabalhos que o aplicativo pode estar fazendo para solicitações simultâneas. É possível rastrear cada solicitação e a amostragem pode ser opcionalmente empregada para associar a sobrecarga de desempenho.

Coletar instrumentação

Há várias maneiras pelas quais os dados de instrumentação podem ser retirados do aplicativo, incluindo:

Diagnóstico especializado

Se a depuração ou a observabilidade não for suficiente, o .NET oferecerá suporte a mecanismos de diagnóstico adicionais, como EventSource, Dumps, DiagnosticSource. Para obter mais informações, consulte o artigo de diagnóstico especializado .

Ferramentas de diagnóstico

O .NET dá suporte a várias ferramentas da CLI que podem ser usadas para diagnosticar seus aplicativos.

Tutoriais de diagnóstico do .NET Core

Depurar um vazamento de memória

Tutorial: Depurar um vazamento de memória percorre a localização de um vazamento de memória. A ferramenta dotnet-counters é usada para confirmar o vazamento e a ferramenta dotnet-dump é usada para diagnosticar o vazamento.

Depurar alto uso da CPU

Tutorial: Depurar o alto uso da CPU orienta você a investigar o alto uso da CPU. Ele usa a ferramenta dotnet-counters para confirmar o alto uso da CPU. Em seguida, ele orienta você usando o utilitário trace for performance analysis (dotnet-trace) ou Linux perf para coletar e exibir o perfil de uso da CPU.

Depurar deadlock

Tutorial: Depurar deadlock mostra como usar a ferramenta dotnet-dump para investigar threads e bloqueios.

Depurar a fome do ThreadPool

Tutorial: Depurar a fome do threadPool mostra como usar as ferramentas dotnet-counters e dotnet-stack para investigar a fome do ThreadPool.

Depurar um StackOverflow

Tutorial: Depurar um StackOverflow demonstra como depurar um StackOverflowException no Linux.

Depurar despejos do Linux

Depurar despejos do Linux explica como coletar e analisar despejos no Linux.

Medir o desempenho usando EventCounters

Tutorial: Medir o desempenho usando EventCounters no .NET mostra como usar a API para medir o EventCounter desempenho em seu aplicativo .NET.

Escrever sua própria ferramenta de diagnóstico

A biblioteca de clientes de diagnóstico permite que você escreva sua própria ferramenta de diagnóstico personalizada mais adequada para seu cenário de diagnóstico. Para obter mais informações, consulte a referência da API Microsoft.Diagnostics.NETCore.Client.