Istnieją dwa sposoby na zwiększenie użyteczności debugowania informacji zamiast ich wyświetlania {MyNamespace.MyProject.MyClass}
w debugerze.
Oto zastosowanie DebuggerDisplayAttribute
i ToString()
metoda.
using System.Diagnostics;
...
[DebuggerDisplay("Name = {Name}")]
public class Person
{
public string Name;
}
lub
public class Person
{
public string Name;
public override string ToString()
{
return string.Format("Name = {0}", Name);
}
}
Czy jest jakiś powód, aby preferować jedno od drugiego? Jest jakiś powód, by nie robić obu tych rzeczy? Czy to czysto osobiste preferencje?
źródło
ToString
jest często używany jako „domyślny ciąg wyświetlania”, np. PrzezConsole.WriteLine
powiązanie danych lub WPF.Jeśli to, co
ToString()
powróci i zobaczysz w debugerze, nie jest tym, czego chciałbyś, użyjDebuggerDisplayAttribute
.źródło
Można również wziąć pod uwagę powolność debuggera:
DebuggerDisplayAttribute
wyrażenie formatu jest interpretowane przez debuger po każdym kroku debugowania / punkcie przerwania.ToString
jest wkompilowany w Twój kod i dlatego jest znacznie szybszy do wykonania przez debuger.To samo dotyczy warunkowych punktów przerwania: jeśli wyrażenie warunkowe jest zbyt wolne, aby zinterpretować je przez debuger za każdym razem, gdy wykonanie osiągnie punkt przerwania, przydatne może być usunięcie punktu przerwania i zamiast tego dodanie tymczasowego kodu w następujący sposób:
if (condition) Debugger.Break();
źródło