¿Qué herramientas de diagnóstico están disponibles en .NET Core?

El comportamiento del software no siempre es el esperado, pero .NET Core tiene herramientas y API que lo ayudarán a diagnosticar estos problemas de manera rápida y eficaz.

Este artículo lo ayuda a encontrar las distintas herramientas que necesita.

Depuradores

Los depuradores le permiten interactuar con el programa. Puede pausar, ejecutar de manera incremental, examinar y reanudar para obtener información sobre el comportamiento del código. Un depurador es una buena opción para diagnosticar problemas funcionales que se pueden reproducir de manera fácil.

Pruebas unitarias

Las pruebas unitarias son un componente clave de la integración continua y la implementación de software de alta calidad. Las pruebas unitarias están diseñadas para brindarle una advertencia temprana cuando se daña algo.

Instrumentación para la observabilidad

.NET admite técnicas de instrumentación estándar del sector mediante métricas, registros y seguimientos distribuidos. La instrumentación es código que se agrega a un proyecto de software para registrar lo que está haciendo. Esta información se puede recopilar en archivos, bases de datos o en memoria y analizarse para comprender cómo funciona un programa de software. Con frecuencia se usa en entornos de producción para supervisar los problemas y diagnosticarlos. El entorno de ejecución de .NET tiene instrumentación integrada que se puede habilitar opcionalmente y API que le permiten agregar instrumentación personalizada especializada para la aplicación.

Métricas

Las métricas son medidas numéricas registradas a lo largo del tiempo para supervisar el rendimiento y el estado de una aplicación. Las métricas se suelen usar para generar alertas cuando se detectan posibles problemas. Las métricas tienen muy poca sobrecarga de rendimiento y muchos servicios las configuran como telemetría siempre activa.

Registros

El registro es una técnica en la que el código se instrumenta para generar un registro, una anotación de eventos interesantes que se produjeron mientras se ejecutaba el programa. A menudo, un conjunto de línea base de eventos de registro se configura de forma predeterminada y se puede habilitar un registro más extenso a petición para diagnosticar problemas concretos. La sobrecarga de rendimiento es variable en función de la cantidad de datos que se registran.

Seguimientos distribuidos

El seguimiento distribuido es una forma especializada de registro que ayuda a localizar errores y problemas de rendimiento dentro de las aplicaciones distribuidas entre varias máquinas o procesos. Esta técnica realiza el seguimiento de las solicitudes mediante una aplicación que pone en correlación todo el trabajo realizado por diferentes componentes de la aplicación y los separa de otro trabajo que la aplicación pueda estar realizando para solicitudes simultáneas. Es posible realizar un seguimiento de todas las solicitudes y, opcionalmente, se puede emplear muestreo para limitar la sobrecarga de rendimiento.

Volcados

Un volcado es un archivo que contiene una instantánea del proceso en el momento de la creación. Pueden ser útiles para examinar el estado de la aplicación con fines de depuración.

Símbolos

Los símbolos son una asignación entre el código de origen y el binario que produce el compilador. Los depuradores de .NET suelen usarlos para resolver números de línea de origen, nombres de variables locales y otros tipos de información de diagnóstico.

Recopilación de diagnósticos en contenedores

Las herramientas de diagnóstico que se usan en los entornos de Linux que no están en contenedores también se pueden utilizar para recopilar diagnósticos en contenedores. Solo es necesario realizar algunos cambios en la utilización para asegurarse de que las herramientas funcionan en un contenedor de Docker.

Herramientas globales de diagnóstico de .NET Core

dotnet-counters

dotnet-counters es una herramienta diseñada para la investigación del rendimiento y la supervisión del estado de primer nivel. Permite observar los valores del contador de rendimiento que se publican a través de la API EventCounter. Por ejemplo, puede supervisar rápidamente elementos como el uso de la CPU o la tasa de excepciones que se generan en su aplicación .NET Core.

dotnet-dump

La herramienta dotnet-dump permite recopilar y analizar los volcados de Windows y Linux sin necesidad de un depurador nativo.

dotnet-gcdump

La herramienta dotnet-gcdump permite recopilar volcados de memoria de GC (recolector de elementos no utilizados) de procesos de .NET dinámicos.

dotnet-trace

.NET Core incluye lo que se denomina EventPipe, a través del cual se exponen los datos de diagnóstico. La herramienta dotnet-trace permite consumir datos interesantes sobre la generación de perfiles a partir de su aplicación, lo cual puede resultar útil para analizar la causa principal de que una aplicación se ejecute con lentitud.

dotnet-stack

La herramienta dotnet-stack permite imprimir rápidamente las pilas administradas de todos los subprocesos de un proceso .NET en ejecución.

dotnet-symbol

dotnet-symbol descarga archivos (símbolos, DAC/DBI, archivos de host, etc.) necesarios para abrir un volcado de núcleo o minivolcado. Use esta herramienta si necesita símbolos y módulos para depurar un archivo de volcado capturado en otro equipo.

dotnet-sos

dotnet-sos instala la extensión de depuración de SOS en Linux y macOS (también en Windows si usa Windbg/cdb).

PerfCollect

PerfCollect es un script de bash que se puede usar para recopilar seguimientos con perf y LTTng para un análisis de rendimiento más detallado de las aplicaciones .NET que se ejecutan en distribuciones de Linux.

Tutoriales de diagnóstico de .NET Core

Escritura de su propia herramienta de diagnóstico

La biblioteca cliente de diagnóstico le permite escribir su propia herramienta de diagnóstico personalizada más adecuada para su escenario de diagnóstico. Busque información en la referencia de Microsoft.Diagnostics.NETCore.Client API.

Depuración de una fuga de memoria

Tutorial: Depuración de una fuga de memoria le guía a través de la búsqueda de una fuga de memoria. La herramienta dotnet-counters se usa para confirmar la fuga, y la herramienta dotnet-dump, para diagnosticarla.

Depuración del uso elevado de CPU

Tutorial: Depuración del uso elevado de CPU le guía a través de la investigación del uso elevado de CPU. Utiliza la herramienta dotnet-counters para confirmar ese uso elevado. A continuación, se explica el uso del seguimiento de la utilidad de análisis del rendimiento (dotnet-trace) o de Linux perf para recopilar y ver el perfil de uso de la CPU.

Depuración de interbloqueo

Tutorial: Depuración de interbloqueo muestra cómo usar la herramienta dotnet-dump para investigar los subprocesos y bloqueos.

Depuración del colapso de ThreadPool

En Tutorial: Depuración del colapso de ThreadPool se muestra cómo usar las herramientas dotnet-counters y dotnet-stack para investigar el colapso de ThreadPool.

Depuración de StackOverflow

Tutorial: Depuración de StackOverflow muestra cómo depurar un elemento StackOverflowException en Linux.

Depuración de volcados de Linux

Depuración de volcados de Linux explica cómo recopilar y analizar volcados en Linux.

Medición del rendimiento mediante EventCounters

Tutorial: Medición del rendimiento mediante EventCounters en .NET muestra cómo usar la API EventCounter para medir el rendimiento de la aplicación .NET.