-
Notifications
You must be signed in to change notification settings - Fork 114
Add custom DebuggerDisplay for HRESULT #1445
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
AArnott
merged 2 commits into
microsoft:main
from
misaz:dev/misaz/hresult_debugger_display
Sep 5, 2025
Merged
Add custom DebuggerDisplay for HRESULT #1445
AArnott
merged 2 commits into
microsoft:main
from
misaz:dev/misaz/hresult_debugger_display
Sep 5, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…message for error code
Author
|
@microsoft-github-policy-service agree |
AArnott
approved these changes
Sep 5, 2025
Member
AArnott
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! This is awesome.
| } | ||
|
|
||
| string debuggerDisplay; | ||
| if (members.Where(x => x is PropertyDeclarationSyntax && ((PropertyDeclarationSyntax)x).Identifier.ValueText == "DebuggerDisplay").Any()) |
Member
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note for next time: you could simplify this line to:
Suggested change
| if (members.Where(x => x is PropertyDeclarationSyntax && ((PropertyDeclarationSyntax)x).Identifier.ValueText == "DebuggerDisplay").Any()) | |
| if (members.Where(x => x is PropertyDeclarationSyntax { Identifier.ValueText: "DebuggerDisplay" }).Any()) |
Member
|
/azp run |
|
No pipelines are associated with this pull request. |
This was referenced Oct 20, 2025
Closed
This was referenced Oct 27, 2025
Closed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR adds support for using customized DebuggerDisplay for customized types (templates) instead of hardocoding
DebuggerDisplayto structure's first field name. It is designed to work in a way, that when there is property namedDebuggerDisplay, it is used instead. Actually there already were some custom DebuggerDisplays in templates, but these only work withSpecialTypeDefNamesbecause for normal types, only Members are obtained and rest of the template is thrown away and recrated including DebuggerDisplay attribute.PR also uses newly introduced capability and adds custom
DebuggerDisplayfor HRESULT type. Custom visualizer show HEX error code number followed by humman readable description of HRESULT error code:It allows developer debugging apps to understand errors without need to use Error Lookup tool or searching online.
Message is internally obtained using avalaible .NET APIs (two variants are implemented depending on .NET version, both should produce same results because internally both end up using
FormatMessageW). As you can see, FormatMessage provides localized message. I use Czech windows, so message is in Czech. For debugging it should be no problem.It also brings debugger visualization experience on par with native debugger which has similar natvis (or maybe hardcoded, who knows?) visualizer for HRESULT as well.
I was also considering adding similar for NTSTATUS, but obtaining message for NTSTATUSes is not that easy because it requires passing NTDLL module handle (+ one more flag) to FormatMessageW and this is not exposed to .NET API. But it can be done manually. Instead of bloating NTSTATUS template in horroble way, I decided to step back on it. Also note, that native debugger do not support visualizer for NTSTATUS as well.