Na obsah stránky

Vizualizace vlastních typů v debuggeru

Aleš Roubíček | | # permalink

Jistě všichni znáte možnost jak přepsat výchozí zobrazování vlastního typu v debuggeru VS pomocí přepsání metody ToString(). Ovšem někdy je tato metoda velice užitečná i na jiné účely, co potom s tím?

Když debuguje ve VS vlastní typy ve watches se vám u proměnné zobrazuje celý název typu, např. Rarous.NForms.TextItem. Pokud chcete v debuggeru vidět užitečnější informace, zpravidla přepíšete metodu ToString(), kterou má každý objekt, tak, aby vypisovala to, co chcete. Např.:

public override string ToString() {
  return "\"" + Control.Name + "\", Value=" + Control.GetValue();
}

Při debutování by se nám pak mohlo zobrazovat něco jako "email", Value=frantisek.koudelka@sts-chvojkovice.cz. Jenže. Teď chci, aby se mi v šabloně při zápisu <%=Form["email"]%> vypsal kód formulářového prvku a jeho labelu. Jak to udělat, aby se zachovalo pěkné debugování a přibyla nová a ještě lepší funkčnost?

Naštěstí existuje jiné řešení, jak debugovací informace zobrazovat. Troufnu si tvrdit, že i mnohem čistší. V .net frameworku existuje atribut System.Diagnostics.DebuggerDisplayAttribute, který je určen, právě k zobrazování informací v debuggeru. Jeho užití je následující:

[DebuggerDisplay("{Control.Name}, Value={Control.GetValue(),nq}")]
public class TextItem : FormItem {
  // implementace třídy...

  public override string ToString() {
    return Label + " " + Control;
  }
}

Tímto jsme dosáhli, nové funkčnosti metody ToString() a zachovali jsme vlastní informace zobrazované v debuggeru. Více informaci o atributu DebuggerDisplay, najdete v MSDN.

Tagy: C#, debugger, NForms

Našli jste v článku chybu? Máte námět na reportáž? Založte mi ticket.