A: 

Well, I just tested it and it works with my simple program. I also thought I had a possible explanation, but testing shows that it wasn't what I thought (info below code).

First, here's the code that works:

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

What I thought was that the collection class that you retrieve from FetchChildrenFromDB method had its own DebuggerDisplay attribute attached to it, and it took priority. But that's not it. I implemented a dummy IList class with that attribute attached to it, and the one attached to the property still took priority.

Lasse V. Karlsen
I know that DebuggerDisplay should work. That's why I am puzzled. It clearly does not work for my lazy property.
mark
A: 

I think, it could be due to brackets "(Frozen)".
Change it to "Frozen", if it is text.

BTW, what is "Frozen"? Is it a simple text or an existing property?
EDIT: This is what I guessed based on the example code on MSDN & Lasse's code.

shahkalpesh
Frozen is just a word to let me know that the attribute works. You can replace it with any other word, omit the brackets, whatever. Nothing helps.
mark
+2  A: 

If you are seeing in your watch window something along the lines of:

[+]  ObjectName    | { namespace.object}

Ensure that "Tools->Options->Debugging->General->Show raw structure of objects in variables windows" is NOT checked.

Once I cleared this, my DebuggerDisplay attributes displayed correctly (including showing all the "WTF"'s and "Huh"'s I'd added...)

PaulS
A: 

You should put the DebuggerDisplayAttribute on the class and not on the property, because m_children is an instance field and cannot be evaluated in the property context.

The property display is always evaluated as is, because there is no debugger proxy for it.

Laurent Etiemble