Personalice las visualizaciones de objetos en el depurador de Visual Studio a SU manera

portada

¿Alguna vez has mirado objetos en una ventana de depuración y has deseado poder ver esos objetos por algo diferente a su tipo? Ciertamente ! tengo que expandir elementos para determinar la identidad de cada uno y puede volverse aburrido muy rápido. Idealmente, sería genial ubicarlos rápidamente por un valor de propiedad particular. Afortunadamente para nosotros, Visual Studio tiene dos atributos no tan conocidos como DebuggerDisplay. Este atributo le permite personalizar la forma en que ve los objetos en las ventanas del depurador, como Watch, Autos, Locals y datatips.

Figura 1 – Ventanas locales y DataTips con y sin el atributo DebuggerDisplay añadido al código

¿Qué es el atributo DebuggerDisplay?

Al escribir la sintaxis DebuggerDisplay en la parte superior de una clase, puede elegir qué cadenas y propiedades desea que se visualice en la representación del objeto en las ventanas del depurador. Además de mostrar cadenas en las ventanas del depurador, la adición de llaves ({}) al atributo DebuggerDisplay permite que Visual Studio muestre el valor de una propiedad, campo, método o cualquier expresión que usted especifique. También puede agregar especificadores de formato a DebuggerDisplay para cambiar aún más cómo se muestran y formatean los valores en las ventanas del depurador. En la Figura 2, DebuggerDisplay agrega el especificador de formato “nq” (sin comillas). La pantalla resultante muestra el título de la propiedad de cadena sin las comillas circundantes.

Figura 2: sintaxis básica de DebuggerDisplay agregada a la parte superior de la clase Book

Figura 3 – Ventana de locales con la sintaxis DebuggerDisplay anterior agregada al código

¿Puedo mostrar expresiones para cada objeto en las ventanas del depurador?

Puede haber ocasiones en las que desee mostrar expresiones en las ventanas del depurador. Buenas noticias: ¡puede mostrar expresiones usando el atributo DebuggerDisplay!

Ejemplo de atributo DebuggerDisplay que contiene una expresión

Figura 4 – Ejemplo de atributo DebuggerDisplay que contiene una expresión

Ventana de locales con la sintaxis DebuggerDisplay anterior y evaluación de expresiones agregadas

Figura 5 – Ventana de locales con la sintaxis DebuggerDisplay anterior y evaluación de expresiones agregadas

Malas noticias: las expresiones DebuggerDisplay pueden causar problemas adicionales al depurar su código. Los problemas potenciales incluyen éxitos de rendimiento para expresiones grandes o complejas, errores de compilación y tiempo de ejecución cuando el lenguaje de la expresión difiere del lenguaje que se está depurando, y el estado de la aplicación cambia cuando las expresiones mutan las propiedades.

Figura 6: atributo DebuggerDisplay con sintaxis de expresión ternaria de estilo Visual Basic agregada

Figura 6: atributo DebuggerDisplay con sintaxis de expresión ternaria de estilo Visual Basic agregada

Figura 7 - Error de tiempo de ejecución recibido después de usar la sintaxis de estilo Visual Basic anterior mientras se realiza la depuración en C #

Figura 7 – Error de tiempo de ejecución recibido después de usar la sintaxis de estilo Visual Basic anterior mientras se realiza la depuración en C #

¡Pero no temas! Una forma de reducir estos posibles problemas con las expresiones es creando una propiedad privada o un método que devuelva la cadena de una expresión ejecutada y pidiéndole a DebuggerDisplay que muestre esa propiedad.

Figura 8: creación de una propiedad privada que contiene expresiones más complejas y el formato al que hace referencia DebuggerDisplay

Figura 8: creación de una propiedad privada que contiene expresiones más complejas y el formato al que hace referencia DebuggerDisplay

Figura 9: creación de un método que contiene expresiones más complejas y el formato al que hace referencia DebuggerDisplay

Figura 9: creación de un método que contiene expresiones más complejas y el formato al que hace referencia DebuggerDisplay

¡Estas características son impresionantes y me ahorrarán mucho tiempo! ¿Cómo puedo ayudar a compartir DebuggerDisplay y Natvis con otros?

Dato curioso: ¡el atributo DebuggerDisplay ha estado en Visual Studio durante años! Estos atributos son extremadamente útiles para la mayoría de los desarrolladores, pero aún no son tan reconocibles y conocidos como podrían ser.