{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);
}
}
하나를 선호하는 이유가 있습니까? 둘 다하지 않을 이유가 있습니까? 순전히 개인적인 취향입니까?
답변
사용 [DebuggerDisplay]
은 디버거 전용입니다. ToString ()을 재정의하면 런타임에 디스플레이를 변경하는 “부작용”이 있습니다.
이것은 좋은 것일 수도 있고 아닐 수도 있습니다.
종종 표준 ToString()
출력 보다 디버깅 중에 더 많은 정보를 원 하며,이 경우 둘 다 사용합니다.
예를 들어, 귀하의 경우 “ToString”구현이 이상하게 보입니다. “Person”클래스 ToString () 구현이 “Name = PersonsName”이 아닌 Name을 직접 반환 할 것으로 예상합니다. 그러나 디버깅 중에 추가 정보가 필요할 수 있습니다.
답변
“사용자 정의 클래스 또는 구조체를 만들 때 클라이언트 코드에 유형에 대한 정보를 제공하려면 ToString 메서드를 재정의해야합니다.” — MSDN
무슨 일이있는 경우 ToString()
반환하고 디버거에서 볼 당신이 다음하고 싶은 당신이 무엇을 사용하지 않습니다 DebuggerDisplayAttribute
.
답변
디버거의 속도 저하도 고려할 수 있습니다.
DebuggerDisplayAttribute
형식 표현식은 각 디버깅 단계 / 중단 점 후에 디버거에 의해 해석 됩니다.
ToString
되어 컴파일 된 코드에 따라서 훨씬 빠르게 디버거에서 실행하는 것입니다.
조건부 중단 점에서도 마찬가지입니다. 조건식이 너무 느려서 실행이 중단 점에 도달 할 때마다 디버거에서 해석 할 수없는 경우 중단 점을 제거하고 대신 다음과 같은 임시 코드를 추가하는 것이 유용 할 수 있습니다. if (condition) Debugger.Break();