TIP: DebuggerDisplay

Muy buenas! Acabo de leer el post de Luis Ruiz Pavon sobre sobre el sobreescribir .ToString() para mejorar la información del modo de depuración de VS.

Y ya puestos, para complementar su post, quería comentar un truco que no se si conoce mucha gente y que permite algo parecido sin necesidad de sobreescribir ToString (que se usa para otras cosas además de para mostrar la información en la ventana de depuración) y que es el uso del atributo DebuggerDisplay.

En este caso un ejemplo vale más que mil palabras:

  1.    [DebuggerDisplay ("Product {Name} ({Code}): {Description}")]
  2.     public class Product
  3.     {
  4.         public string Code { get; set; }
  5.         public string Name { get; set; }
  6.         public string Description { get; set; }
  7.         public Product(string code, string name, string description)
  8.         {
  9.             Code = code;
  10.             Name = name;
  11.             Description = description;
  12.         }
  13.         public override string ToString()
  14.         {
  15.             return String.Format("Code – {0}", Code);
  16.         }
  17.     }

Y el resultado en la ventana de watches es:

image

Podemos conseguir cosas más interesantes utilizando las propiedades Name y TargetTypeName que modifican los valores de las columnas “Name” y “Type”. Así si uso el siguiente [DebuggerDisplay]:

  1. [DebuggerDisplay ("({Code}): {Description}", Name = "Product {Name}", Type ="Producto")]

Veo lo siguiente en la ventana de watches:

image

Y en la ventana de Locals veo, ahora, lo siguiente:

image

El uso de DebuggerDisplay tiene sus limitaciones si se compara con redefinir ToString() (este último es un método y puede contener código como el que mostraba Luis en su post para convertir a JSON), mientras que DebuggerDisplay tan solo puede generar una pequeña cadena a partir de las propiedades.

Si una clase tiene tanto ToString() redefinido como DebuggerDispay este último tiene precedencia para el depurador.

¡Y… eso es todo! 🙂

Saludos!

Un comentario en “TIP: DebuggerDisplay”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *