En algunas ocasiones tenemos ante nosotros Apps que crashean, pero no disponemos de su código. Ya sea porque estamos haciendo de betatesters, porque el fallo se está produciendo en la máquina de un cliente o porque sencillamente no se trate de nuestra App.

Cuando una App de la Tienda de Windows produce un error grave, el comportamiento por defecto es morir silenciosamente. Desgraciadamente esto no nos proporciona ningún código de error o mensaje que pudiera ayudarnos a saber un poco más del siniestro. Una vez más, Visual Studio viene a nuestro rescate.

Para averiguar más sobre los fallos de una App instalada en nuestra máquina y de la cual no tenemos el código fuente, podemos usar Visual Studio y seleccionar “Debug -> Debug Installed App Package”:

image

Una vez hecho esto, deberemos elegir la App en cuestión. En este post usaremos una aplicación de ejemplo que produce un crash muy concreto Sonrisa

image

Fijaos también que he marcado la opción “Stop at first statement”. Esto nos dará tiempo a fijar saltos de ruptura antes de que se produzca el fallo. Una vez demos en “Start” se cargarán los símbolos y empezará la depuración de la App. Cuando llegue al código de la App se detendrá la ejecución y nuestro IntelliTrace será más o menos así:

image

Antes de continuar la depuración, vamos a fijar puntos de ruptura en los sitios que generen excepciones CLR. La forma más cómoda es usar “Quick Launch” y buscar “exception”:

image

Ahora no tenemos más que seleccionar “Common Language Runtime Exceptions” y continuar con la depuración.

image

Cuando se produzca la excepción, se detendrá la depuración y nuestro IntelliTrace mostrará el evento:

image

Si tuviéramos el código, iríamos directamente a la porción de código que ha causado el problema, pero como no es el caso una de las mejores opciones es ir a la vista “Locals”. En ella podremos ver información relacionada con nuestra excepción:

image

En este caso podemos ver que la excepción se debe a un problema con una URL cuyo formato no parece ser correcto. No se nos proporciona la URL, pero hemos pasado de un error desconocido a saber que el problema se encuentra en el manejo de las URLs.

Si fueramos betatesters, el desarrollador tendría ahora una información mucho más precisa y tendría el error mucho más acotado.

Un saludo,

Pablo Carballude (@carballude_es)