Depuración de excepciones en aplicaciones .NET mediante Snapshot Debugger
Cuando está habilitado, Snapshot Debugger recoge automáticamente una instantánea de depuración del código fuente y las variables cuando se produce una excepción en su aplicación .NET activa. Snapshot Debugger en Application Insights:
- Supervisa los registros generados por el sistema desde la aplicación web.
- Recopila instantáneas en las excepciones de inicio superior.
- Proporciona información necesaria para diagnosticar problemas en entornos de producción.
Obtenga más información sobre los procesos Snapshot Debugger e Snapshot Uploader.
Aplicaciones y entornos admitidos
En esta sección se enumeran las aplicaciones y entornos que se admiten.
APLICACIONES
La recopilación de instantáneas está disponible para:
- .NET Framework 4.6.2 y versiones más recientes.
- .NET 6.0 o posterior en Windows.
Entornos
Se admiten los siguientes entornos:
- Azure App Service
- Funciones de Azure
- Azure Cloud Services con la familia del SO 4 o posterior
- Azure Service Fabric con Windows Server 2012 R2 o posterior
- Azure Virtual Machines y Azure Virtual Machine Scale Sets con Windows Server 2012 R2 o posterior
- Máquinas virtuales o físicas locales que ejecutan Windows Server 2012 R2 o posterior, o Windows 8.1 o posterior.
Nota
No se admiten las aplicaciones cliente (por ejemplo, WPF, Windows Forms o UWP).
Requisitos previos para usar Snapshot Debugger
Paquetes y configuraciones
- Incluir el paquete NuGet de Snapshot Collector en la aplicación.
- Configurar parámetros para la recopilación en
ApplicationInsights.config
.
Permisos
- Compruebe que se ha agregado al rol de Application Insights Snapshot Debugger para el destino Instantánea de Application Insights.
Funcionamiento de Snapshot Debugger
Snapshot Debugger se implementa como un procesador de telemetría de Application Insights. Al ejecutar la aplicación, el procesador de telemetría de Snapshot Debugger se agrega a la canalización de registros generados por el sistema de la aplicación.
Importante
Las instantáneas pueden contener datos personales u otra información confidencial en los valores de las variables y parámetros. Los datos de las instantáneas se almacenan en la misma región que el recurso de Application Insights.
Proceso del Snapshot Debugger
El proceso del Snapshot Debugger se inicia y termina con el método TrackException
. Una instantánea de proceso es un clon suspendido del proceso en ejecución, de modo que los usuarios experimenten una interrupción mínima o nula. En un escenario típico:
La aplicación inicia el
TrackException
.Snapshot Debugger supervisa las excepciones a medida que se inician al suscribirse al evento
AppDomain.CurrentDomain.FirstChanceException
.Se incrementa un contador para el identificador del problema.
- Cuando el contador alcanza el valor
ThresholdForSnapshotting
, el identificador del problema se agrega a un plan de recolección.
Nota:
El
ThresholdForSnapshotting
valor mínimo predeterminado es 1. Con este valor, la aplicación debe desencadenar la misma excepción dos veces antes de crear una instantánea.- Cuando el contador alcanza el valor
El identificador de problema del evento de excepción se calcula y se compara con los identificadores de problema del plan de recopilación.
Si hay una coincidencia entre los id. de los problemas, se crea una instantánea del proceso en ejecución.
- Se asigna un identificador único a la instantánea y la excepción se marca con ese identificador.
Nota:
La velocidad de creación de instantáneas está limitada por la configuración de
SnapshotsPerTenMinutesLimit
. De manera predeterminada, el límite es una instantánea cada 10 minutos.Tras la devolución del controlador
FirstChanceException
, la excepción producida se procesa con normalidad.La excepción vuelve a alcanzar el método
TrackException
y se notifica a Application Insights, junto con el identificador de instantánea.
Nota:
Establezca IsEnabledInDeveloperMode
en true
si quiere generar instantáneas durante la depuración en Visual Studio.
Proceso del cargador de instantáneas
Aunque el proceso de Snapshot Debugger continúa ejecutándose y atendiendo el tráfico a los usuarios con poca interrupción, la instantánea se entrega al proceso del cargador de instantáneas. En un escenario típico, el cargador de instantáneas:
Crea un minivolcado.
Carga el minivolcado en Application Insights, junto con cualquier símbolo relevante (archivos .pdb).
Nota:
No se pueden cargar más de 50 instantáneas al día.
Si ha habilitado Snapshot Debugger, pero no ve las instantáneas, consulte la Guía de solución de problemas.
Actualización de Snapshot Debugger
Snapshot Debugger se actualiza automáticamente a través de la extensión de sitio de Application Insights preinstalada e integrada.
La adición manual de una extensión de sitio de Application Insights para mantener Snapshot Debugger actualizado está en desuso.
Gastos generales
Snapshot Debugger está diseñado para su uso en entornos de producción. La configuración predeterminada incluye límites de velocidad para minimizar el impacto en las aplicaciones.
Sin embargo, puede experimentar una pequeña sobrecarga de CPU, memoria y E/S asociada al depurador de instantáneas, como:
- Cuando se produce una excepción en la aplicación
- Si el controlador de excepciones decide crear una instantánea
- Cuando se llama a
TrackException
No hay ningún costo adicional para almacenar los datos capturados por Snapshot Debugger.
Consulte escenarios de ejemplo en los que puede experimentar la sobrecarga de Snapshot Debugger.
Limitaciones
En esta sección se describen las limitaciones de Snapshot Debugger.
Retención de datos
Las instantáneas de depuración se guardan durante 15 días. Esta directiva de retención de datos predeterminadas se establece para cada aplicación. Si necesita aumentar este valor, puede solicitar un aumento abriendo una incidencia de soporte técnico en Azure Portal. Para cada instancia de Application Insights, se permite un número máximo de 50 instantáneas al día.
Publicación de símbolos
Snapshot Debugger requiere archivos de símbolos en el servidor de producción para:
- Descodificar variables
- Proporcionar una experiencia de depuración en Visual Studio
De forma predeterminada, Visual Studio 2017 versiones 15.2+ publica símbolos para compilaciones de lanzamiento cuando publica en App Service.
En las versiones anteriores, tiene que agregar la siguiente línea al archivo
.pubxml
de su perfil de publicación para que los símbolos se publiquen en modo de versión:<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Para Azure Compute y otros tipos, asegúrese de que los archivos de símbolos son:
- En la misma carpeta de la aplicación principal
.dll
(normalmente,wwwroot/bin
) o - Disponible en la ruta de acceso actual.
Para más información sobre las diferentes opciones de símbolos disponibles, consulte la documentación de Visual Studio. Para obtener los mejores resultados, se recomienda usar Full, Portable o Embedded.
Compilaciones optimizadas
En algunos casos, las variables locales no pueden visualizarse en las compilaciones de lanzamiento debido a las optimizaciones aplicadas por el compilador JIT.
Sin embargo, en App Service, el Snapshot Debugger puede invalidar la optimización de los métodos de lanzamiento que forman parte de su plan de recopilación.
Sugerencia
Instale la extensión de sitio de Application Insights en su instancia de App Service para obtener soporte técnico para la invalidación de optimizaciones.
Pasos siguientes
Habilitar Snapshot Debugger de Application Insights para la aplicación: