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:

Entornos

Se admiten los siguientes entornos:

Nota

No se admiten las aplicaciones cliente (por ejemplo, WPF, Windows Forms o UWP).

Requisitos previos para usar Snapshot Debugger

Paquetes y configuraciones

Permisos

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:

  1. La aplicación inicia el TrackException.

  2. Snapshot Debugger supervisa las excepciones a medida que se inician al suscribirse al evento AppDomain.CurrentDomain.FirstChanceException.

  3. 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.

  4. El identificador de problema del evento de excepción se calcula y se compara con los identificadores de problema del plan de recopilación.

  5. 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.

  6. Tras la devolución del controlador FirstChanceException, la excepción producida se procesa con normalidad.

  7. 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:

  1. Crea un minivolcado.

  2. 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: