DebuggerDisplay attribute displays incorrectly under certain (extremely rare) conditions

Open
#111,844 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
csharp
Domain
devtools

Research direction

Reproduce the behavior using the Program.cs example in a .NET 9 console application, then inspect how the debugger resolves DebuggerDisplay for the net9_preview.TextSegment type with its Segments member. Compare the tooltip with the expected "I'm a TextSegment" output and verify that changing each name independently avoids the issue.

Written by the indexing model from the issue text.

Description

area-Diagnostics-coreclr tracking-external-issue
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

Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/runtime

All issues in dotnet/runtime

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.