[release/8.0-staging] Fix Crossgen2 PDB generation (again) #96566
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.
Backport of #96518 to release/8.0-staging
/cc @trylek
Customer Impact
Lack of meaningful symbol information for Crossgen2-compiled assemblies. This is only relevant for profiler scenarios, Watson and debugging in general use IL PDB information in combination with a special debug section in the Crossgen2 PE executable (unrelated to PDBs) that can be used to map RVAs to IL offsets. In particular, we believe the following apps / components to be affected by this deficiency:
• AzureProfiler
• CPR (M365 service-wide profiling)
• DiagTrack
• PerfView
• Fleet Diagnostics / Viewing of Traces in Azure DiagSpaces
• VS PerfTrack (capture of profiles of VS in production)
Testing
Local verification of the fix using cvdump, standard lab testing. I have also tested this with PerfView but it turns out that PerfView currently doesn't fully support lookup of .ni.pdb files for manually built Crossgen2 assemblies, I have put up a WIP PR with the PerfView fix to implement this support that is currently open for design discussion:
microsoft/perfview#1973
Risk
Low - PDB information is a relatively niche scenario mostly exercised in PerfView; it certainly shouldn't affect production behavior of .NET 8 apps.
IMPORTANT: If this backport is for a servicing release, please verify that:
The PR target branch is
release/X.0-staging
, notrelease/X.0
.If the change touches code that ships in a NuGet package, you have added the necessary package authoring and gotten it explicitly reviewed.