Tip when using DebuggerDisplay in Dotnet/Visual studio
When debugging and watching an object one only sees the name of the type in the debugger.
1 | MyProjectNamespace.Meeting |
The quickest solution is to click the little plus sign or use the keyboard right arrow to show the properties. This is ok to do once or twice but doing this for every comparison is a waste of time at best.
Better then is to use SystemDiagnostics.DebuggerDisplay like so:
1 2 3 | [DebuggerDisplay("ID:{ID}, UID:{UID}, Name:{Name}, Type:{this.GetType()}")] public class Meeting : BaseClass { ... |
to get
1 | ID:1, UID:234abc, Name:XYZ, Type:MyProjectNamespace.Meeting |
The Tip was to use {this.GetType()} in the argument of DebuggerDisplay.
Update
To show count of lists use something in the lines of:
1 | [DebuggerDisplay("ID:{ID},Customers:{Customers==null?(int?)null:Customers.Count}")] |
Update update
Since the DebuggerDisplay parameter is written as is into the assembly it might not work between languages. A solution for this is to call a method instead as most lanuguages uses the MyMethod() syntax.
It is also creates less overhead to call a method instead of having the expression in a string according to the MSDN link below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [DebuggerDisplay("{DebuggerDisplay(),nq}")] public class ExchangeRateDto { public int ID { get; set; } public string Name { get; set; } #if DEBUG private string DebuggerDisplay() { return $"ID:{this.ID}, Name:{this.Name}, Type:{this.GetType()}"; } } #endif |
Update update update
Use nameof. Also skip the this.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [DebuggerDisplay("{DebuggerDisplay(),nq}")] public class ExchangeRateDto { public int ID { get; set; } public string Name { get; set; } #if DEBUG private string DebuggerDisplay() { return $"{nameof(ID)}:{ID}, {nameof(Name)}:{Name}, Type:{GetType()}"; } } #endif |
Update update update update
I have noticed that in Visual Studio 2022 (possibly earlier) one can ctrl-. on the class or record name and Visual studio writes the boilerplate code. The DebuggerDisplay is called GetDebuggerDisplay and only returns this.ToString() unfortunately. So it has to be adapted.
—
Praise where praise is due: https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/.
There is more documentation at Stack overflow documentation.
Search Term: DebuggerDisplayAttribute
Tags: csharp, debuggerdisplay, debugging, dotnet