2009-12-07 4 views
11

메모리 주소 값을 포함하도록 DebuggerDisplayAttribute을 적용하고 싶습니다. 16 진수로 표시하는 방법이 있습니까?DebuggerDisplay로 표시된 텍스트에 문자열 서식을 사용할 수 있습니까?

[DebuggerDisplay("Foo: Address value is {Address}")] 
class Foo 
{ 
    System.IntPtr m_Address = new System.IntPtr(43981); // Sample value 


    System.IntPtr Address 
    { 
     get { return m_Address; } 
    } 
} 

이 뜻을 표시 : Foo: Address value is 43981 대신,이 값이 그렇게, 진수로 표시하고 싶습니다 : Foo: Address value is 0xABCD.

ToString()을 재정 의하여 모든 종류의 서식을 적용 할 수 있다는 것을 알고 있지만 DebuggerDisplayAttributes를 사용하여 동일한 서식을 사용할 수 있는지 궁금합니다.

미리 감사드립니다.

답변

22

예, 일반적으로하는 것처럼 속성에서 어떤 방법을 사용할 수 있습니다. [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] 당신은 진수 형식으로 값을 표시 할 경우 예를 들어

http://msdn.microsoft.com/en-us/library/x810d419.aspx

+0

가능할 수도 있지만 반대하는 것이 좋습니다. 숫자를 16 진수 또는 10 진수로 표시하는 선택 항목을 제거합니다. 텍스트를 추가하지 않으면 시작과 끝 부분에 따옴표가 붙어 출력되기 때문에 결국에는 "0xDEADBEEF"가 디버거 창에 나타납니다. 처음에는 정수가 아닌 문자열처럼 보입니다. –

2

, 즉 형식으로 값을 표시하는 Visual Studio에서 옵션이 있습니다. 디버깅하는 동안 변수 위로 마우스를 가져 가면 디버깅 화면이 표시되거나 시계 또는 지역 창에서 변수를 찾을 수 있습니다. 변수를 마우스 오른쪽 버튼으로 클릭하고 "16 진수 표시"옵션을 선택하십시오. 그러면 디버거는 모든 숫자 값을 16 진수 형식으로 표시합니다. "Foo : Address value is 0x0000abcd"

불행히도 내가 묻는 것처럼 DebuggerDisplay 속성에 의해 표시되는 문자열 형식을 실제로 제어 할 수있는 방법이 없습니다.

7

는 기본적으로 https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/

추천 팁있다, 개인 재산, 말, DebugDisplay을 만들 수 있습니다. 속성에 원하는 형식의 문자열을 반환하십시오. 그런 다음 DebuggerDisplay 속성에서 새 개인 속성을 사용하십시오.

예 :

[DebuggerDisplay("{DebugDisplay,nq}")] 
public sealed class Student { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    private string DebugDisplay { 
     get { return string.Format("Student: {0} {1}", FirstName, LastName); } 
    } 
} 

이 방법은 훨씬 더 읽기 쉽습니다.

관련 문제