DebuggerDisplay属性无法按预期工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DebuggerDisplay属性无法按预期工作相关的知识,希望对你有一定的参考价值。

我知道这个属性应该在C#中起作用,但在我的情况下却没有。我有一个懒惰的孩子班级。访问此属性可能会产生向服务器往返的副作用。因此,当我在调试器观察窗口中观看时,我不希望发生这种情况。

省略所有不相关的细节,源代码看起来非常普通:

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

然而,当我在观察窗口观看对象并展开this时,我在显示中看不到(Frozen),这意味着调试器只是忽略了属性。

DebuggerDisplay image snapshot

根据Reflector的说法,该属性确实存在。我用的是VS2008。

有任何想法吗?

答案

如果您在观察窗口中看到以下内容:

[+]  ObjectName    | { namespace.object}

确保未选中“工具 - >选项 - >调试 - >常规 - >显示变量窗口中对象的原始结构”。

一旦我清除了这一点,我的DebuggerDisplay属性就会正确显示(包括显示所有“WTF”和“Huh”我添加的......)

另一答案

好吧,我刚测试了它,它适用于我的简单程序。我还以为我有一个可能的解释,但测试显示它不是我想的(代码下面的信息)。

首先,这是有效的代码:

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类,并且附加到该属性的类仍然优先。

另一答案

我想,这可能是由于括号“(冻结)”。 将其更改为“冻结”,如果是文本。

顺便说一句,什么是“冻结”?它是简单的文本还是现有的属性? 编辑:这是我根据MSDN和Lasse代码上的示例代码猜测的。

另一答案

您应该将DebuggerDisplayAttribute放在类而不是属性上,因为m_children是一个实例字段,无法在属性上下文中进行求值。

始终按原样评估属性显示,因为没有调试器代理。

以上是关于DebuggerDisplay属性无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

双向链表 std::unique_ptr 类在节点删除时无法按预期工作

SaveFileDialog AddExtension 无法按预期工作

PyQt5 - QLabel 填充无法按预期工作

SaveFileDialog AddExtension无法按预期工作

Angular 4 加载器无法按预期工作

kafka 消费者组 ID 无法按预期工作