When an obfuscated Flutter/Dart app uploads a dart symbol map and reports a compound exception.type (readable prefix + obfuscated class token), Sentry leaves the obfuscated token as-is. Issue titles stay partially obfuscated even though the map is present and the event is eligible for dart deobfuscation.
Common app pattern:
// e.g. BlocObserver / error wrapper
exception.type = 'Bloc ${bloc.runtimeType}';
// after --obfuscate → "Bloc aBc"
Observed
- Symbol map uploaded and linked via
debug_meta / debug id
- Event uses
sentry.dart.flutter and qualifies for dart deobfuscation
exception.type is a compound string like Bloc aBc
- After processing, type remains
Bloc aBc instead of Bloc CheckoutBloc (or whatever aBc maps to)
Why this happens
Dart symbol map remapping currently does an exact match on the full exception.type string (plus Instance of '…' value patterns). It does not split compound types and remap individual tokens.
Lookup key is the full string "Bloc aBc", which is not in the map (maps only have single identifiers like "aBc").
Related: #1565
Reproduction (shape)
- Build Flutter app with
--obfuscate and upload the dart symbol map
- Capture an error whose
exception.type is composed as "Bloc ${runtimeType}" (or any "Label $obfuscatedType")
- Confirm map is attached to the event debug id
- Observe issue title / exception type still contains the obfuscated token
Workarounds
- Capture pure
runtimeType as exception.type (no human-readable prefix in the type string)
- Put the readable label (
Bloc, feature area, etc.) in a tag / context field instead of baking it into exception.type
Possible directions (SDK)
- Document the exact-match limitation and recommend pure runtime types for
exception.type
- If any first-party helper/integration composes prefixed types, prefer tags/context for the prefix
- Consider SDK-side guidance or helpers so composed labels do not break symbol-map remapping
Requested by Gino Buenaflor via Junior.
--
View Junior Session in Sentry
When an obfuscated Flutter/Dart app uploads a dart symbol map and reports a compound
exception.type(readable prefix + obfuscated class token), Sentry leaves the obfuscated token as-is. Issue titles stay partially obfuscated even though the map is present and the event is eligible for dart deobfuscation.Common app pattern:
Observed
debug_meta/ debug idsentry.dart.flutterand qualifies for dart deobfuscationexception.typeis a compound string likeBloc aBcBloc aBcinstead ofBloc CheckoutBloc(or whateveraBcmaps to)Why this happens
Dart symbol map remapping currently does an exact match on the full
exception.typestring (plusInstance of '…'value patterns). It does not split compound types and remap individual tokens.Lookup key is the full string
"Bloc aBc", which is not in the map (maps only have single identifiers like"aBc").Related: #1565
Reproduction (shape)
--obfuscateand upload the dart symbol mapexception.typeis composed as"Bloc ${runtimeType}"(or any"Label $obfuscatedType")Workarounds
runtimeTypeasexception.type(no human-readable prefix in the type string)Bloc, feature area, etc.) in a tag / context field instead of baking it intoexception.typePossible directions (SDK)
exception.typeRequested by Gino Buenaflor via Junior.
--
View Junior Session in Sentry