stack_trace
stack_trace copied to clipboard
Should org-dartlang-sdk frames be stripped by `terse`?
Our code runs through Trace.terse
, and we see (repeat) frames with the scheme 'org-dartlang-sdk' logged. I wasn't able to find much via google, and no issues here, but it seems like that would be a "core" frame that should be folded, doesn't it? (The current implementation is that only 'dart'
scheme Uris in Frames are considered core.)
Here's an obfuscated example from our codebase:
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/js_helper.dart 1342:37 wrapException
https://cdn.foo.com/foo/packages/foo_sdk/src/public/client.dart 50:27 createAuthenticatedFContext
https://cdn.foo.com/foo/packages/foo_sdk/src/public/client.dart 122:5 FooClient.createFContext
https://cdn.foo.com/foo/packages/foo_sdk/src/public/client.dart 121:12 FooClient.createFContext[function-entry$0]
https://cdn.foo.com/foo/packages/foo_client/src/services/foo_service.dart 57:35 fooService._context
https://cdn.foo.com/foo/packages/foo_client/src/services/foo_service.dart 119:66 fooService.loadfooForAttachment
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 307:19 _wrapJsFunctionForAsync
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 332:23 _wrapJsFunctionForAsync.<anonymous function>
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 237:3 _asyncStartSync
https://cdn.foo.com/foo/packages/foo_client/src/services/foo_service.dart 111:59 fooService.loadfooForAttachment
https://cdn.foo.com/foo/packages/foo_client/src/services/foo_service.dart 111:59 fooService.loadfooForAttachment
https://cdn.foo.com/foo/packages/foo_client/src/experiences/foo/providers/foo_service_foo_provider.dart 117:40 fooServicefooProvider.fetchfoo
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 307:19 _wrapJsFunctionForAsync
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 332:23 _wrapJsFunctionForAsync.<anonymous function>
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 237:3 _asyncStartSync
https://cdn.foo.com/foo/packages/foo_client/src/experiences/foo/providers/foo_service_foo_provider.dart 114:56 fooServicefooProvider.fetchfoo
https://cdn.foo.com/foo/packages/foo_client/src/experiences/foo/providers/polling_foo_provider.dart 35:82 PollingfooProvider.startPolling.<anonymous function>
org-dartlang-sdk:///sdk/lib/async/zone.dart 1134:37 _rootRunUnary
org-dartlang-sdk:///sdk/lib/async/zone.dart 1132:3 _rootRunUnary[function-entry$5]
org-dartlang-sdk:///sdk/lib/async/zone.dart 1030:46 _CustomZone.runUnary
org-dartlang-sdk:///sdk/lib/async/zone.dart 1026:5 _CustomZone.runUnary[function-entry$2]
org-dartlang-sdk:///sdk/lib/async/zone.dart 933:7 _CustomZone.runUnaryGuarded
org-dartlang-sdk:///sdk/lib/async/zone.dart 931:8 _CustomZone.runUnaryGuarded[function-entry$2]
org-dartlang-sdk:///sdk/lib/async/zone.dart 970:26 _CustomZone.bindUnaryCallbackGuarded.<anonymous function>
org-dartlang-sdk:///sdk/lib/async/zone.dart 1138:12 _rootRunUnary
org-dartlang-sdk:///sdk/lib/async/zone.dart 1132:3 _rootRunUnary[function-entry$5]
org-dartlang-sdk:///sdk/lib/async/zone.dart 1030:46 _CustomZone.runUnary
org-dartlang-sdk:///sdk/lib/async/zone.dart 1026:5 _CustomZone.runUnary[function-entry$2]
org-dartlang-sdk:///sdk/lib/async/zone.dart 954:26 _CustomZone.bindUnaryCallback.<anonymous function>
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart 159:13 _TimerImpl.periodic.<anonymous function>
org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/js_helper.dart 2015:14 invokeClosure
https://app.foo.com/home/?next_url=https%3A%2F%2Fapp.foo.com%2Fhome%2F 16:23900 nrWrapper
If others want to fold those runs down to single frames, this code will do so:
static String formatStackTrace(StackTrace stackTrace) =>
Trace.from(stackTrace)
.foldFrames(
(Frame frame) => frame.uri.scheme.contains('org-dartlang-sdk'),
terse: true,
)
.toString();