Snapshot Debugger

Un desafío constante de nuestros sistemas, es poder dar un correcto soporte y rápida resolución de incidencias en nuestros ambientes productivos. Muchas veces, si nuestro ambiente productivo es un ambiente cloud, este desafió puede tomar algunas dificultades adicionales a las propias del tema.

Cuando un error ocurre en alguno de nuestros sistemas dentro de un ambiente cloud, es posible que no podamos replicar el error en un ambiente local, debido a las capacidades, cargas, tecnologías, etc; o bien que no sepamos exactamente que es lo que produce dicho comportamiento. Posiblemente lo primero que intentemos para encontrar el problema sea revisar los registros o intentando reproducir el problema en un entorno local. A menudo, los registros pueden ser insuficientes, o una reproducción local puede ser difícil, si no imposible, de configurar.

Una de las alternativas disponibles hace tiempo es el Remote Dubugger; sin embargo, esta característica presenta dificultades dado que interrumpe el thread de ejecución utilizando un breackpoin. Esto implica interrumpir el flujo de ejecución en un ambiente productivo, lo cual a veces no solo es imposible, dado el costo que tiene coordinar el flujo que queremos probar con las peticiones que se están produciendo dentro del ambiente, sino que también podemos causar fallas adicionales y una mala experiencia tanto para las personas que requieren resolver el problema como para los usuarios.

Snapshot Debugger permite de una forma segura y no invasiva obtener información sobre el estado de nuestro sistema para poder depurarlo. El depurador de Visual Studio conoce el entorno de Azure donde se está produciendo el problema, y nos permite obtener información de la ejecución sin interrumpir el thread.

El Snapshot Debugger funciona tomando una instantánea del estado de su aplicación en las líneas de código especificadas donde se configura el Snappoints. Mientras que los breackpoints tradicionales detienen el proceso en ejecución dentro del servidor evitando que se procesen solicitudes adicionales; Los Snapshots capturan rápidamente el estado, incluidos los locales, los relojes y la pila de llamadas mientras el proceso continúa ejecutándose. Esto significa que puede depurar la aplicación real en ejecución, sin afectar la experiencia de sus clientes mientras usan el sistema.

En la siguiente imagen se visualizan los pasos para utilizar un Snapshot para depurar un proceso en ejecución en Azure. La imagen es un poco pesada y puede tardar unos minutos en verse la animación completa.

El uso de snapshots casi no tiene impacto en el rendimiento del  servicio ni en la experiencia que los usuarios finales.

Más información sobre el uso de snapshots