다음을 통해 공유


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에 있습니다.

예제

다음 코드 예제에서는 DebuggerDisplayDebuggerBrowseableDebuggerTypeProxy를 함께 사용하는 방법을 보여 줍니다. 조사식 창과 같은 디버거 변수 창에 이 코드가 표시될 때는 다음과 같은 확장이 생성됩니다.

이름

형식

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;
            }
        }
    }
}

참고 항목

개념

사용자 지정 데이터 형식 표시

디버거 표시 특성을 사용하여 디버깅 향상

참조

DebuggerTypeProxy 특성 사용