Skip to content

DebuggerDisplay attribute displays incorrectly under certain (extremely rare) conditions #111844

Open
@f2bo

Description

Description

The text displayed by the debugger for a variable containing a reference to a class is incorrect only when the following three conditions are satisfied. The namespace of the class must be net9_preview, the class must be named TextSegment, and it must contain a property named Segments.

To be honest, the conditions seem to be so rare that I don't expect many people will be hitting this issue, if any. I only stumbled upon this problem in a console app where I quickly test out new ideas and that I keep around since the .NET 9 preview days. Its default namespace, which I never bothered to change is net9_preview, which I certainly don't need to preserve. So I'm really reporting this more out of curiosity than any expectation that this will be fixed.

Reproduction Steps

  1. Create a new console application that targets .NET 9 and replace Program.cs with the following code.
using System.Diagnostics;
using net9_preview;

TextSegment segment = new();

return;

namespace net9_preview
{
    [DebuggerDisplay($"I'm a {nameof(TextSegment)}")]
    internal class TextSegment
    {
        public int Segments => 42;
    }
}
  1. Execute in the debugger and examine the text shown for the segment variable after executing the line that initializes it.

Expected behavior

The debugger tooltip should display the text "I'm a TextSegment".

Image

Actual behavior

The debugger tooltip displays the text "Segments = 42" .

Image

Regression?

No response

Known Workarounds

Changing any single one of the following for the TextSegment class restores the behavior expected from the applied DebuggerDisplay attribute.

  • namespace (e.g. change to net10_preview),
  • class name (e.g. change to TextChunk),
  • Segments property name (e.g. change to Items)

Configuration

.NET 9.0.1
OS Name: Windows
OS Version: 10.0.19045
OS Platform: Windows
RID: win-x64

Other information

No response

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions