Hasta ahora, en la primer parte y en la segunda, vimos trucos para el editor de código y mejorar nuestra navegación en el. Ahora es el turno de algunos trucos para mejorar nuestra depuración.
La mayoría de nosotros conocemos los comandos básicos como F5 para comenzar la depuración, F9 para poner un punto de interrupción o F11 para entrar dentro de la implementación. Además de estos, existen muchas funcionalidades en la herramienta que podemos utilizar para hacer más sencillo nuestro trabajo.
Mover el punto de ejecución
El primero es mover punto donde se está ejecutando. Del lado izquierdo del editor, podemos encontrar una flecha de color amarillo, esta indica el lugar donde está detenida la ejecución. Si necesitamos ir a otra línea para volver a ejecutar desde ahí, lo único que debemos hacer, es mantener presionado sobre la flecha y arrastrarla hasta el lugar deseado.
Ejecutar hasta un punto
Supongamos que tenemos un punto de interrupción en la primera línea, pero deseamos ejecutar hasta una en particular. Podemos hacer es hacer clic en la línea y presionar Ctrl + F10 o presionar clic derecho y seleccionarlo del menú contextual Run to Cursor.
Otra caminos es por medio del marcador verde a la izquierda de la línea de código. Nos posicionamos sobre la línea a la cual queremos ir, a la derecha, aparecerá el marcador verde que nos indica que podemos avanzar hasta ese punto haciendo clic en el .
Podemos ir hasta una línea de ejecución sin la necesidad de ejecutar el código de en medio. Nuevamente, si nos paramos sobre la línea, vemos el marcador verde del lado izquierdo. Si presionamos el control, veremos que se pone de color amarillo, hacemos click e irá hasta la línea sin ejecutar el código intermedio. Es por esta razón que al ver la ventana de seguimiento el objeto está como nulo.
Configurar puntos de interrupción
Los puntos de interrupción no solamente se detienen porque los marquemos. Podemos configurar un punto de interrupción configurando diferentes condiciones o cuando suceda un evento en particular. Es muy útil cuando estamos depurando y dependemos de los valores que contienen los objetos.
Podemos configurar una propiedad de un objeto para que se detenga cuando ha cambiado. En la imagen podemos ver cómo debemos hacerlo. Configuramos que al cambiar ProductId del objeto producto se detenga. Noten como la línea queda en color gris.
Supongamos que necesitamos detener la ejecución cuando una propiedad tome un valor específico. Para esto, sobre el marcador rojo del punto de interrupción, presionamos sobre el engranaje de configuración u seleccionamos Conditions. Vemos que tenemos varios parámetros de configuración. Completamos que se detenga cuando p, que está dentro de un bucle, en la propiedad Description sea igual a “Product 2”. Esto hará que el bucle se ejecuta hasta que la condición sea la deseada.
Ahora, en lugar de detenernos, además, queremos ver todas las salidas del bucle. Podemos usar Actions. Nuevamente, sobre el punto de interrupción seleccionamos el engranaje y seleccionamos Actions. Aquí podemos escribir un texto y luego entre { } el nombre de la variable u objeto que deseamos imprimir en la ventana de salida.
Ver valores de funciones
Muchas veces, ejecutamos un método que devuelve un valor, pero lo ignoramos o no lo asignamos a una variable. Esto hace que no sea accesible en tiempo de ejecución o depuración. El tiempo de depuración podemos verlo, si es necesario, desde la ventana autos. Podemos abrirla, en tiempo de depuración, desde Debug > Windows > Auto.
Para acceder al valor debemos utilizar lo que se denomina pseudo-variable, en este caso $RetunValue. Como vemos en la imagen, luego de ejecutar el método, escribimos en la ventana de inmediato $RetunValue y veremos el resultado.
Verificar sin cambios en los objetos desde la ventana inmediata y observación
Siempre que ejecutemos un método desde la ventana inmediato cambiamos el valor de alguna propiedad u objeto. Como vemos en la imagen, cada vez que ejecutamos el método se actualiza el valor en la ventana de observación avisándonos que cambio el valor. Para que no tenga efecto, podemos usar el prefijo nse.
Descompilar el código IL
Muchas veces creamos librerías para reutilizar en nuestros proyectos. Hacemos referencia en nuestro proyecto al ensamblado que tiene extensión dll. En este ejemplo, tenemos Math.dll, es un proyecto que yo cree para usar en el ejemplo.
Una vez que hicimos referencia, funcionara como una caja negra, donde no podemos ver la implementación. Visual Studio nos da la posibilidad de poder hacerlo a pesar de que este compilado. Esta funcionalidad nos permite descompilar el componente y tener disponible el código de implementación.
Conclusiones
Con todo este set de funcionalidades y herramientas podemos hacer más simple la búsqueda de algún problema que tengamos en nuestra aplicación. En el próximo post veremos trucos para refactoring. Espero que les sea útil y los aprovechen.