-
Couldn't load subscription status.
- 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
Add custom DebuggerDisplay for HRESULT #1445
Conversation
…message for error code
|
@microsoft-github-policy-service agree |
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()) |
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:
| if (members.Where(x => x is PropertyDeclarationSyntax && ((PropertyDeclarationSyntax)x).Identifier.ValueText == "DebuggerDisplay").Any()) | |
| if (members.Where(x => x is PropertyDeclarationSyntax { Identifier.ValueText: "DebuggerDisplay" }).Any()) |
|
/azp run |
|
No pipelines are associated with this pull request. |
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.