Partilhar via


Diagnóstico no .NET

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

A implantação nativa do AOT é 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 Diagnóstico de AOT nativo.

Este artigo ajuda-o a encontrar as várias ferramentas de que necessita.

Depuradores

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

Criadores de perfil

Os criadores de perfis permitem-lhe analisar o desempenho do seu programa. Você pode coletar dados sobre o uso de memória, uso da CPU e outras métricas para diagnosticar e entender problemas de desempenho.

Instrumentação para observabilidade

O .NET oferece 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 é o 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 é frequentemente usado em ambientes de produção para monitorar problemas e diagnosticá-los. O tempo de execução do .NET tem instrumentação interna que pode ser habilitada opcionalmente e APIs que permitem adicionar instrumentação personalizada especializada para seu aplicativo.

Registos

O registro em log é uma técnica onde o código é instrumentado para produzir um log, um registro de eventos interessantes que ocorreram enquanto o programa estava em execução. Muitas vezes, um conjunto de eventos de log de linha de base é configurado por padrão e um 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ão sendo registrados.

Para a maioria dos casos, seja adicionando log a um projeto existente ou criando um novo projeto, a infraestrutura ILogger é uma boa opção padrão. ILogger Suporta registro 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 sobre muitas implementações de log de terceiros que oferecem funcionalidade rica e extensibilidade.

Metrics

As métricas são medições numéricas registradas ao longo do tempo para monitorar o desempenho e a integridade do aplicativo. As métricas são frequentemente usadas para gerar alertas quando possíveis problemas são detetados. 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ções.

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árias máquinas ou processos. Essa técnica rastreia solicitações por meio de um aplicativo, correlacionando o trabalho feito por diferentes componentes do aplicativo e separando-o de outro trabalho que o aplicativo pode estar fazendo para solicitações simultâneas. É possível rastrear todas as solicitações e a amostragem pode ser opcionalmente empregada para limitar 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ósticos especializados

Se a depuração ou observabilidade não for suficiente, o .NET oferece 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 suporta várias ferramentas de CLI que podem ser usadas para diagnosticar seus aplicativos.

Tutoriais de diagnóstico do .NET Core

Depurar uma fuga 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.

Investigar uso elevado de CPU

Tutorial: Depurar alto uso de CPU orienta você através da investigação de alto uso de CPU. Ele usa a ferramenta dotnet-counters para confirmar o alto uso da CPU. Em seguida, ele orienta você pelo uso do utilitário Trace for performance analysis (dotnet-trace) ou Linux perf para coletar e visualizar o perfil de uso da CPU.

Impasse de depuração

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

Depurar fome do ThreadPool

Tutorial: Debug threadPool starvation 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 dumps do Linux

Debug Linux dumps explica como coletar e analisar dumps no Linux.

Meça 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.

Escreva a sua própria ferramenta de diagnóstico

A biblioteca de cliente 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.