Fix GCHeapDump deserialization failure with SerializationConfiguration in TraceEvent 3.1.23 #2283
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.
Problem
GCHeapDump constructor was failing with a
TypeLoadExceptionwhen attempting to load .gcdump files created with older versions of TraceEvent:This affected any application using GCHeapDump to programmatically analyze .NET heap dumps when upgrading from TraceEvent 3.1.13 to 3.1.23.
Root Cause
The class
FastSerialization.SerializationConfigurationwas renamed toFastSerialization.SerializationSettingsin newer versions. When deserializing old .gcdump files that contain references to the old type name, the FastSerialization deserializer cannot find a factory for that type and throws aTypeLoadException.Solution
Added backward compatibility support in the
GCHeapDumpconstructor by implementing anOnUnregisteredTypecallback that maps the old type name to a compatible implementation:The
SerializationConfigurationShimclass provides a compatibleIFastSerializableimplementation that can handle any serialized data from the old type without breaking deserialization.Testing
Added comprehensive tests to verify:
All tests pass and the fix ensures seamless backward compatibility for .gcdump files created with older TraceEvent versions.
Fixes #2282.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.