Depuración de excepciones en aplicaciones de .NET mediante Snapshot Debugger

Cuando se habilita, el Depurador de instantáneas recopila 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 en ejecución. 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.

Aplicaciones y entornos admitidos

Aplicaciones

La recopilación de instantáneas está disponible para:

Entornos

Snapshot Debugger admite los siguientes entornos:

Nota

No se admiten aplicaciones cliente, como WPF, Windows Forms o UWP.

Requisitos previos para Snapshot Debugger

Paquetes y configuraciones

Permisos

Funcionamiento de Snapshot Debugger

Snapshot Debugger funciona como un procesador de telemetría de Application Insights. Cuando se ejecuta la aplicación, el procesador de telemetría de Snapshot Debugger se une 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. Application Insights almacena los datos de instantáneas en la misma región que su recurso.

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. Los usuarios experimentan poca o ninguna interrupción. En un escenario típico:

  1. La aplicación produce una excepción y la notifica a Application Insights mediante una llamada al TrackException método .

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

  3. Snapshot Debugger incrementa un contador para el identificador del problema.

    Cuando el contador alcanza el ThresholdForSnapshotting valor, Snapshot Debugger agrega el identificador de problema a un plan de recopilació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 que snapshot Debugger cree una instantánea.

  4. Snapshot Debugger calcula el identificador de problema del evento de excepción y lo compara con los identificadores de problema del plan de recopilación.

  5. Si hay una coincidencia entre identificadores de problema, Snapshot Debugger crea una instantánea del proceso en ejecución.

    Snapshot Debugger asigna a la instantánea un identificador único y marca la excepción con ese identificador.

    Nota

    La SnapshotsPerTenMinutesLimit configuración limita la tasa de creación de instantáneas. De manera predeterminada, el límite es una instantánea cada 10 minutos.

  6. Después de que el controlador FirstChanceException termine, la aplicación procesa la excepción generada de forma habitual.

  7. La excepción vuelve a alcanzar el método TrackException, que la informa a Application Insights junto con el identificador de la instantánea.

Nota

Establezca true en IsEnabledInDeveloperMode para generar instantáneas mientras depura en Visual Studio.

Proceso de subida de instantáneas

Mientras el proceso Snapshot Debugger sigue ejecutándose y gestionando el tráfico de los usuarios con mínimas interrupciones, transfiere la instantánea al proceso Snapshot Uploader. 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

El cargador de instantáneas no puede 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.

Actualizar el depurador de instantáneas

El Depurador de instantáneas se actualiza automáticamente mediante la extensión de sitio de Application Insights preinstalada e integrada.

Agregar manualmente una extensión de sitio de Application Insights para mantener actualizado Snapshot Debugger ha quedado en desuso.

Sobrecarga del depurador de instantáneas

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 la aplicación produce una excepció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 que captura snapshot Debugger.

Consulte escenarios de ejemplo donde podría experimentar una sobrecarga con el Snapshot Debugger.

Optimizaciones de código

Si Snapshot Debugger recopila instantáneas de la aplicación, es posible que vea información de excepciones relacionada en la información general consolidada sobre optimizaciones de código.

Limitaciones del depurador de instantáneas

Snapshot Debugger tiene las siguientes limitaciones:

  • 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. Para aumentar este valor, abra un caso de soporte técnico en el portal de Azure. Cada instancia de Application Insights permite un 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, versión 15.2 o posterior, publica símbolos para las compilaciones de versión cuando se realiza la publicación 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 obtener más información sobre las opciones de símbolo disponibles, consulte la documentación de Visual Studio. Para obtener los mejores resultados, use Full, Portable o Embedded.

  • Compilaciones optimizadas

    En algunos casos, no se pueden ver variables locales en compilaciones de versión porque el compilador JIT aplica optimizaciones.

    Sin embargo, en App Service, 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 la instancia de App Service para obtener soporte para la desoptimización.

Habilitar el Snapshot Debugger de Application Insights para tu aplicación: