2009-08-19 2 views
4

이 속성은 C#에서 작동해야하지만 내 경우에는 그렇지 않다는 것을 알고 있습니다. 게으른 속성을 가진 클래스가있는 클래스가 있습니다. 이 속성에 액세스하면 서버를 라운드 트립 할 때 부작용이있을 수 있습니다. 그래서, 당연히, 디버거 시계 창에서 이것을 볼 때 자연스럽게 일어나는 것을 원하지 않습니다.DebuggerDisplay 특성이 예상대로 작동하지 않습니다!

모든 관련이없는 사항 생략 소스는 꽤 평범한 같습니다

[DebuggerDisplay("(Frozen) {m_children}")] 
public IList<IEntityBase> Children 
{ 
    get 
    { 
    if (m_children == null) 
    { 
     m_children = FetchChildrenFromDB(this); 
    } 
    return m_children; 
    } 
} 

그리고 아직, 나는 의미 객체를보고 내가 디스플레이에 (냉동)를 참조하지 않는 시계 창에 this을 확장 할 때 디버거는 단순히 특성을 무시합니다. 영상 링크를 제공

는 아래 보여야 여전히 유효 : http://i28.tinypic.com/2zxo9s5.jpg DebuggerDisplay image snapshot http://i28.tinypic.com/2zxo9s5.jpg

속성이 반사판에 의하면, 실제로 존재한다. VS2008을 사용합니다.

아이디어가 있으십니까?

+0

일부 디버깅 문제로 인해 실수로 자신의 DebuggerDisplay 속성을 도입하지 않았는지 확인 했습니까? –

+0

이것이 일부 ORM 구현의 일부인 경우 관찰 가능한 속성을 구현하기 위해 ORM 프레임 워크가 실제 객체 주위에 심층을 만들었습니까? 이러한 일이 발생하는 것을 보았습니다.이 경우 객체의 유형이 소스 코드와 일치하지 않습니다. 소스 코드에서 가진 정확한 유형을보고 있는지 확인할 수 있습니까? –

+0

코드는 클라이언트 측 코드입니다. ORM이 사용되지 않습니다. 우리는 서버 측에서 NHibernate를 사용하지만, 클라이언트 측은 그것으로부터 완전히 분리됩니다. 나는 그것이 심 (shim)이 아닐 것이라고 확신한다. – mark

답변

0

글쎄, 난 그냥 테스트하고 내 간단한 프로그램과 함께 작동합니다. 나는 또한 가능한 설명이 있다고 생각했다. 그러나 테스트는 그것이 내가 생각했던 것이 아니라는 것을 보여준다. (코드 아래의 정보). 내가 생각 무엇

using System; 
using System.Diagnostics; 
using System.Collections.Generic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Program p = new Program(); 
      Console.Out.WriteLine(p.Name); // breakpoint here 
     } 

     private String _Name = String.Empty; 
     [DebuggerDisplay("Name: {_Name}")] 
     public String Name 
     { 
      get { return _Name; } 
      set { _Name = value; } 
     } 

     private IList<String> _Names = new List<String>(); 
     [DebuggerDisplay("Names: {_Names.Count}")] 
     public IList<String> Names 
     { 
      get { return _Names; } 
      set { _Names = value; } 
     } 
    } 
} 

당신이 FetchChildrenFromDB 방법에서 검색 컬렉션 클래스는 자신의 DebuggerDisplay 속성이 첨부했다, 그것이 우선 순위를했다이었다 :

먼저, 여기에 작동하는 코드입니다. 하지만 그렇지 않습니다. 그 속성이 첨부 된 더미 IList 클래스를 구현했고 속성에 연결된 IList 클래스는 여전히 우선 순위를 가졌다.

+0

DebuggerDisplay가 작동해야한다는 것을 알고 있습니다. 그래서 내가 당혹 스럽다. 그것은 나의 게으른 자산을 위해 명확하게 작동하지 않습니다. – mark

0

대괄호 "(냉동)"때문일 수 있습니다.
"Frozen"으로 변경하십시오 (텍스트 인 경우).

현재 "냉동"이란 무엇입니까? 그것은 단순한 텍스트 또는 기존의 속성입니까?
EDIT : 이것은 MSDN & Lasse 코드의 예제 코드를 기반으로 추측 한 것입니다.

+0

냉동은 속성이 작동한다는 것을 알려주는 단어입니다. 다른 단어로 바꿀 수 있고 대괄호는 생략 할 수 있습니다. 아무것도 도움이되지 않습니다. – mark

5

당신의 라인을 따라 시계 창 무언가에 표시되는 경우 : 확인

[+] ObjectName | { namespace.object} 

"도구 -> 옵션 -> Debugging-> 일반 -> 변수 창에서 개체의 원시 구조를 표시"은 선택되지 않습니다. 나는이 클리어되면

, 내 DebuggerDisplay 속성은

0

당신은 클래스에 DebuggerDisplayAttribute을 넣어해야합니다 (들 내가 추가 거라고 ... ' "허"는 s와'모든 'WTF "를 보여주는 포함) 올바르게 표시 은 인스턴스 필드이며 속성 컨텍스트에서 평가할 수 없으므로 속성에 없습니다.

속성 표시는 항상 디버거 프록시가 없기 때문에 그대로 평가됩니다.