Repository navigation
ref(grouping): Add Unity IL2CPP grouping inputs - #124621
Merged
Merged
Conversation
lobsterkatie
marked this pull request as ready for review
September 16, 2026 19:25
yuvmen
approved these changes
Sep 25, 2026
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
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.
The Goal
Add grouping input fixtures and their snapshots for Unity IL2CPP stack traces. No rule changes — this PR is fixtures and generated snapshots only, so the snapshots here record today's behavior.
This change is split out from #122130 (which updates IL2CPP in-app rules) deliberately. Landing the inputs first means that PR's diff consists of the rule change plus the snapshot churn it causes, and the churn is the review artifact: every frame whose
in_appor grouping changes shows up as a line, annotated with the rule responsible.What's covered
Five inputs, each packing several cases into one stack so the snapshot reads as a table rather than one assertion per file:
unity_il2cpp_macos.jsonGameAssembly.dylib,UnityPlayer.dylib,PlugIns/Sentry.*,PlugIns/libsentry.*unity_il2cpp_ios.jsonUnityFramework, nestedUnityRuntime.framework,SentryObjC.framework, the generatedMainApp/main.mmlaunch stubunity_il2cpp_android.jsonlibil2cpp.so,libunity.so,libgame.so,libsentry.so,libsentry-android.sounity_il2cpp_edge_cases.jsonGameAssembly.so,libiPhone-lib.dylib,sentry.dll, a registry package underRuntime/unity_coroutine_dispatch.jsonUnityEngine.CoreModule/InvokeMoveNextcoroutine dispatch (family:other)The three platform inputs carry the same logical stack —
EnemySpawner.Update→CombatSystem.ApplyDamage→TMP_Text.SetText→Animation.Play→ null-ref raise — differing only in binary names and bundle paths. That's what makes them comparable: the same crash, reported from three platforms.Within each platform stack: a frame the IL2CPP line mapping resolved to
Assets/, one resolved to an embeddedPackages/directory, one resolved intoLibrary/PackageCache/(a registry package shipping its ownAssetsdirectory), one resolved into Unity's engine C# underunity/Modules/**/Scripting/Assets/, two unmapped frames still pointing at generatedil2cppOutput/cpp/*.cpp, the engine binary, and the Sentry SDK binaries.What the snapshots currently record
Three separately broken states, which is the point of adding the fixtures before the fix:
appvariant hash todayunity_il2cpp_ios8bbdecb4ad2f92d58133a93ee009a07b— engine, BCL and runtime frames are all in-appunity_il2cpp_androidnull— nothing is in-app at allunity_il2cpp_macosnull— nothing is in-app at allVerified locally with the follow-up rules applied, all three collapse to a single
apphash while theirsystemhashes stay distinct. That's the cross-platform grouping claim, and once these inputs are on master it becomes a checked artifact rather than a screenshot.Authoring notes
Worth knowing if you extend these:
_il2cpp_method_hashinsentry/stacktraces/functions.pystrips the_m<40 hex>suffix before grouping, so identical hashes would have made the matching app hash ambiguous. Differing ones show the trimming is doing the work, and these inputs will diverge loudly if that regex ever changes.unity_il2cpp_edge_cases.jsonare descriptive rather than realistic (unrelated_native_app_source_under_assets_dir). That input is a synthetic stack whose hash is only a regression detector, so the names carry the intent. The three platform inputs use realistic mangled IL2CPP names instead, since their hashes are meaningful.