Existem duas maneiras de aumentar a utilidade das informações de depuração, em vez de ver {MyNamespace.MyProject.MyClass}
no depurador.
Estes são o uso DebuggerDisplayAttribute
e o ToString()
método.
using System.Diagnostics;
...
[DebuggerDisplay("Name = {Name}")]
public class Person
{
public string Name;
}
ou
public class Person
{
public string Name;
public override string ToString()
{
return string.Format("Name = {0}", Name);
}
}
Existe alguma razão para preferir um ao outro? Alguma razão para não fazer as duas coisas? É uma preferência puramente pessoal?
fonte
ToString
é freqüentemente usado como uma "string de exibição padrão", por exemplo, porConsole.WriteLine
ou ligação de dados WPF.Se o que
ToString()
retorna e você vê no depurador não é o que você gostaria, então você usaDebuggerDisplayAttribute
.fonte
A lentidão do depurador também pode ser levada em consideração:
DebuggerDisplayAttribute
A expressão de formato é interpretada pelo depurador após cada etapa / ponto de interrupção de depuração.ToString
é compilado em seu código e, portanto, é muito mais rápido de executar pelo depurador.O mesmo ocorre com os pontos de interrupção condicionais: se a expressão condicional for muito lenta para ser interpretada pelo depurador sempre que a execução atingir o ponto de interrupção, pode ser útil remover o ponto de interrupção e, em vez disso, adicionar código temporário como este:
if (condition) Debugger.Break();
fonte