Отладка C#: [DebuggerDisplay] или ToString()?


есть два способа повысить полезность отладочной информации вместо просмотра {MyNamespace.MyProject.MyClass} в отладчике.

это использование DebuggerDisplayAttribute и ToString() метод.

using System.Diagnostics;
...

[DebuggerDisplay("Name = {Name}")]
public class Person
{
    public string Name;
}

или

public class Person
{
    public string Name;
    public override string ToString()
    {
        return string.Format("Name = {0}", Name);
    }
}

есть ли причина предпочесть одно другому? Никаких причин не сделать это одновременно? Это чисто личные предпочтения?

3 65

3 ответа:

используя [DebuggerDisplay] предназначен только для отладчика. Переопределение ToString () имеет "побочный эффект" изменения отображения во время выполнения.

Это может быть или не быть хорошей вещью.

часто, вы хотите получить больше информации во время отладки, чем стандартный ToString() вывод, в этом случае вы бы использовали оба.

например, в вашем случае реализация "ToString" кажется мне странной. Я бы ожидал, что реализация класса" Person " ToString() просто вернет имя напрямую, а не"Name = PersonsName". Однако во время отладки мне может понадобиться эта дополнительная информация.

" при создании пользовательского класса или структуры следует переопределить метод ToString, чтобы предоставить сведения о типе клиентскому коду."- MSDN

Если ToString() возвращает и вы видите в отладчике не то, что вы хотели бы, то вы используете DebuggerDisplayAttribute.

медлительность отладчика также может быть учтена:

DebuggerDisplayAttribute выражение формат:понял отладчиком после каждого шага отладки / точки останова.

ToString и compiled в вашем коде и поэтому гораздо быстрее выполняется отладчиком.

то же самое с условными точками останова: если условное выражение слишком медленно интерпретируется отладчиком каждый раз, когда выполнение достигает точка останова, может быть полезно удалить точку останова и вместо этого добавить временный код следующим образом:if (condition) Debugger.Break();