원문 : Using the DebuggerDisplay Attribute - BlackWasp


디버깅 시 string 타입과 numeric 타입의 값을 볼 수 있다. 사용자 정의 객체의 경우 인스턴스 이름에 해당하는 값에 클래스의 이름 또는 ToString() 메소드의 결과값을 출력된다. DebuggerDisplay 어트리뷰트를 이용하면 이 값들을 변경할 수 있다.


The DebuggerDisplay Attribute

프로그램을 디버그 모드로 Visual Studio 디버거 모드로 실행 시 '지역 창'에서 변수의 값을 관찰할 수 있다.
변수가 객체를 포함하고 있다면 객체를 트리 구조로 표현해준다. 


지역 창에서 객체 트리를 펼치면 객체의 프로퍼티와 필드값을 볼 수 있다. 위 이미지에서 경우 MainWindow 타입의 인스턴스에 해당하는 값이 클래스 이름으로 출력된다. 만약 사용자 정의 객체가 ToString 메소드를 오버라이딩 하지 않았다면 객체의 이름이 출력되어 디버깅에 도움이 되지 않는다. 

디버깅시 클래스 인스턴스를 위한 유용한 정보가 보여지기 원한다면 ToString 메소드를 오버라이딩 하면 된다.(.NET Framework 1.1 요구 사항) 하지만 ToString 메소드를 클래스가 다른 목적으로 사용한다면 이 방법은 실용적이지 못하다. 

*) Effective C# 에서는 사용자 정의 클래스를 정의할 때 항상 ToString 메소드를 적절하게 오버라이딩 하라고 조언한다.

ToString 메소드를 오버라이딩 하지 않고 DebuggerDisplay 어트리뷰트를 적용하면 지역 창에 표시되는 인스턴스값을 바꿀 수 있다. DebuggingDisplay 어트리뷰트는 .NET Framework 2.0 이상에서 지원한다.

DebuggerDisplay 어트리뷰트 대상
- 클래스, 구조체 및 기타 타입에도 사용할 수 있다.

DebuggerDisplay 어트리뷰트 매개변수
- 한개의 String 타입의 매개변수를 갖는다. 이 매개변수값이 지역 창의 Value 값에 출력된다.


Adding the DebuggerDisplay Attribute to a Class

테스트를 해보자! 간단한 사용자 정의 클래스를 갖는 콘솔 어플리케이션을 만든다. 
Square 클래스는 Dimension 자동 프로퍼티를 갖으며 영역값을 리턴하는 Square 메소드를 갖는다.


디버깅 모드에서 s.Dimensions = 5 코드에 위치하였을 때 지역창에는 다음과 같이 출력된다. 즉, Square 클래스의 인스턴스인 s 에 값에는 클래스 이름이 출력된다.


Adding the Attribute
DebuggerDisplay 어트리뷰트는 System.Diagnostics 네임스페이스에 있으므로 네임스페이스를 using 해준다.


DebuggerDisplay 어트리뷰트 매개변수에는 출력할 값을 {} 안에 넣어준다. 프로퍼티, 메소드의 리턴값 등이 사용되어 진다. 



DebuggerDisplay 에 사용한 프로퍼티가 string 타입이라면 해당 값이 "" 큰따옴표에 묶여 출력되게 된다. 해당 프로퍼티 이름에 nq를 지정하면 큰따옴표 없이 출력된다.




Using Expressions
DebuggerDisplay 어트리뷰트에 간단한 식을 사용할 수 있다. 산술 연산 및 논리 연산이 가능하다.




Demo Source




@
Posted by six605
,