DebuggerDisplay 특성 사용
업데이트: 2007년 11월
이 항목은 다음 언어에 적용됩니다.
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
![]() |
Standard |
||||
Pro 및 Team |
표의 범례:
![]() |
해당 |
![]() |
해당 없음 |
![]() |
명령은 기본적으로 숨겨져 있습니다. |
DebuggerDisplay 특성(System.Diagnostics.DebuggerDisplayAttribute)은 클래스 또는 필드가 디버거 변수 창에 표시되는 방식을 제어합니다. 이 특성은 다음 항목에 적용할 수 있습니다.
클래스
구조체
대리자
열거형
필드
속성
어셈블리
DebuggerDisplay 특성에는 형식 인스턴스에 대한 값 열에 표시되는 문자열인 단일 인수가 있습니다. 이 문자열에는 중괄호({와 })가 들어 있습니다. 괄호 안의 텍스트는 필드, 속성 또는 메서드로 확인됩니다.
C# 코드에서는 중괄호 안에 일반 식을 사용할 수 있습니다. 식에서는 대상 형식의 현재 인스턴스에 한해 this 포인터에 암시적으로 액세스할 수 있습니다. 식에서 별칭, 로캘 또는 포인터에는 액세스할 수 없습니다. 식이 속성을 참조하는 경우 해당 속성의 특성은 처리되지 않습니다.
C# 개체에 재정의된 ToString()이 있으면 디버거에서 이 재정의를 호출하여 표준 {<typeName>} 대신 이 메서드의 결과를 보여 줍니다. 따라서 재정의된 ToString()이 있는 경우에는 DebuggerDisplay를 사용할 필요가 없습니다. 둘 모두 사용하는 경우에는 DebuggerDisplay 특성이 ToString() 재정의보다 우선합니다.
옵션 대화 상자의 디버깅 범주에 있는 일반 페이지의 사용자 설정에 따라 디버거에서 이 암시적 ToString() 호출을 계산할지 여부가 결정됩니다. Visual Basic에서는 이 암시적 ToString() 계산을 구현하지 않습니다.
다음 표에서는 DebuggerDisplay 특성의 사용 예와 예제 출력을 보여 줍니다.
특성 |
값 열에 표시되는 출력 |
---|---|
[DebuggerDisplay("x = {x} y = {y}")] x 및 y 필드가 있는 형식에서 사용됩니다. |
x = 5 y = 18 |
[DebuggerDisplay("String value is {getString()}")] 매개 변수 구문은 언어에 따라 다를 수 있으므로 주의하여 사용하십시오. |
String value is [5, 6, 6] |
[DebuggerDisplay("Object {count - 2}: {(flag) ? \"yes\" : \"no\"}")] 식 구문은 언어에 따라 다를 수 있으므로 주의하여 사용하십시오. |
Object 6: yes |
[DebuggerDisplay("Last = {_lastName,nq} {_var == null ? \"\" : \"First = \" + _firstName,nq}")] ,nq는 따옴표를 제거합니다. |
성이 있는 경우 Last = lastname First = firstname 성이 없는 경우 Last = lastname |
DebuggerDisplay는 명명된 매개 변수도 받아들입니다.
매개 변수 |
용도 |
---|---|
Name, Type |
이러한 매개 변수는 변수 창의 이름 및 형식 열에 영향을 줍니다. 생성자와 동일한 구문을 사용하여 이러한 매개 변수를 문자열로 설정할 수 있습니다. 이러한 매개 변수를 지나치게 사용하거나 올바르지 않게 사용하면 혼란스러운 결과가 발생할 수 있습니다. |
Target, TargetTypeName |
특성이 어셈블리 수준에서 사용될 때 대상 형식을 지정합니다. |
![]() |
---|
autoexp.cs 파일은 어셈블리 수준에서 DebuggerDisplay 특성을 사용합니다. autoexp.cs 파일은 C# 변수에 사용되는 Visual Studio의 기본 확장을 결정합니다. DebuggerDisplay 특성 사용 방법의 예제에서 autoexp.cs 파일을 검토하거나 autoexp.cs 파일을 수정하고 컴파일하여 기본 확장을 변경할 수 있습니다. autoexp.cs 파일은 수정하기 전에 백업해야 합니다. \Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies에 있는 Microsoft.VisualStudio.DebuggerVisualizers.dll을 참조해야 합니다. autoexp.cs 파일은 My Documents/Visual Studio 9.0/Visualizers에 있습니다. |
예제
다음 코드 예제에서는 DebuggerDisplay와 DebuggerBrowseable 및 DebuggerTypeProxy를 함께 사용하는 방법을 보여 줍니다. 조사식 창과 같은 디버거 변수 창에 이 코드가 표시될 때는 다음과 같은 확장이 생성됩니다.
이름 |
값 |
형식 |
---|---|---|
Key |
"three" |
object {string} |
Value |
3 |
object {int} |
[DebuggerDisplay("{value}", Name = "{key}")]
internal class KeyValuePairs
{
private IDictionary dictionary;
private object key;
private object value;
public KeyValuePairs(IDictionary dictionary, object key, object value)
{
this.value = value;
this.key = key;
this.dictionary = dictionary;
}
public object Key
{
get { return key; }
set
{
object tempValue = dictionary[key];
dictionary.Remove(key);
key = value;
dictionary.Add(key, tempValue);
}
}
public object Value
{
get { return this.value; }
set
{
this.value = value;
dictionary[key] = this.value;
}
}
}
[DebuggerDisplay("Count = {hashtable.Count}")]
[DebuggerTypeProxy(typeof(HashtableDebugView))]
class MyHashtable
{
public Hashtable hashtable;
public MyHashtable()
{
hashtable = new Hashtable();
}
private class HashtableDebugView
{
private MyHashtable myhashtable;
public HashtableDebugView(MyHashtable myhashtable)
{
this.myhashtable = myhashtable;
}
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public KeyValuePairs[] Keys
{
get
{
KeyValuePairs[] keys = new KeyValuePairs[myhashtable.hashtable.Count];
int i = 0;
foreach (object key in myhashtable.hashtable.Keys)
{
keys[i] = new KeyValuePairs(myhashtable.hashtable, key, myhashtable.hashtable[key]);
i++;
}
return keys;
}
}
}
}