-
-
Notifications
You must be signed in to change notification settings - Fork 277
Description
Platform
Flutter Wasm, Flutter Web, Flutter Desktop Linux, Flutter Desktop Windows, Flutter Mobile Android, Flutter Mobile iOS
Obfuscation
Enabled
Debug Info
Enabled
Doctor
flutter version: 3.32.5
Version
8.14.2
Steps to Reproduce
It's a race condition and thus unreliable to reproduce, but the root cause is here:
sentry-dart/packages/flutter/lib/src/integrations/flutter_error_integration.dart
Lines 91 to 107 in 05da225
| await hub.captureEvent(event, stackTrace: stackTrace, hint: hint); | |
| // we don't call Zone.current.handleUncaughtError because we'd like | |
| // to set a specific mechanism for FlutterError.onError. | |
| } else { | |
| options.log( | |
| SentryLevel.debug, | |
| 'Error not captured due to [FlutterErrorDetails.silent], ' | |
| 'Enable [SentryFlutterOptions.reportSilentFlutterErrors] ' | |
| 'if you wish to capture silent errors', | |
| ); | |
| } | |
| // Call original handler, regardless of `errorDetails.silent` or | |
| // `reportSilentFlutterErrors`. This ensures, that we don't swallow | |
| // messages. | |
| if (_defaultOnError != null) { | |
| _defaultOnError!(errorDetails); | |
| } |
The sentry error integration calls the original error handler with the reported error, but that might only happen after an async await, and apparently some parts of the flutter error can't be used across async gaps.
For example, the flutter widget inspector error handler will serialize the diagnostics node, with all its render objects, etc:
https://github.com/flutter/flutter/blob/7438e5491588fdb0852161fd2b8df46b32515d37/packages/flutter/lib/src/widgets/widget_inspector.dart#L1008-L1032
And that might fail if the render objects are already diposed. E.g. calling debugDescribeChildren on a RenderParagraph (Text widget) throws an error for me. (See actual result)
Expected Result
No error.
Actual Result
This is the call stack when the error happens: (The exception is Null check operator used on a null value)
RenderParagraph.text (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\rendering\paragraph.dart:391)
RenderParagraph.debugDescribeChildren (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\rendering\paragraph.dart:1398)
DiagnosticableTreeNode.getChildren (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:2968)
DiagnosticsNode.toJsonMap.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1644)
DiagnosticsNode.toJsonMap (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1670)
DiagnosticsNode.toJsonList.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1717)
MappedListIterable.elementAt (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:442)
ListIterator.moveNext (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:371)
new _GrowableList._ofEfficientLengthIterable (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\growable_array.dart:194)
new _GrowableList.of (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\growable_array.dart:154)
new List.of (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\array_patch.dart:40)
ListIterable.toList (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:224)
DiagnosticsNode.toJsonList (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1718)
DiagnosticsNode.toJsonMap.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1667)
DiagnosticsNode.toJsonMap (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1670)
DiagnosticsNode.toJsonList.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1717)
MappedListIterable.elementAt (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:442)
ListIterator.moveNext (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:371)
new _GrowableList._ofEfficientLengthIterable (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\growable_array.dart:194)
new _GrowableList.of (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\growable_array.dart:154)
new List.of (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\array_patch.dart:40)
ListIterable.toList (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:224)
DiagnosticsNode.toJsonList (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1718)
DiagnosticsNode.toJsonMap.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1667)
DiagnosticsNode.toJsonMap (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1670)
DiagnosticsNode.toJsonList.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1717)
MappedListIterable.elementAt (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:442)
ListIterator.moveNext (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:371)
new _GrowableList._ofEfficientLengthIterable (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\growable_array.dart:194)
new _GrowableList.of (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\growable_array.dart:154)
new List.of (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\_internal\vm\lib\array_patch.dart:40)
ListIterable.toList (c:\Users\HannesWinkler\devel\flutter\bin\cache\pkg\sky_engine\lib\internal\iterable.dart:224)
DiagnosticsNode.toJsonList (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1718)
DiagnosticsNode.toJsonMap.<anonymous closure> (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1661)
DiagnosticsNode.toJsonMap (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\foundation\diagnostics.dart:1670)
WidgetInspectorService._nodeToJson (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\widgets\widget_inspector.dart:1774)
WidgetInspectorService._reportStructuredError (c:\Users\HannesWinkler\devel\flutter\packages\flutter\lib\src\widgets\widget_inspector.dart:1010)
FlutterErrorIntegration.call.<anonymous closure> (d:\.pub-cache\hosted\pub.dev\sentry_flutter-8.14.2\lib\src\integrations\flutter_error_integration.dart:106)
<asynchronous gap> (Unknown Source:0)
Are you willing to submit a PR?
None
Metadata
Metadata
Assignees
Projects
Status