diff --git a/CHANGELOG.md b/CHANGELOG.md index 955b09850c..26e43f6389 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Enhancements + +- Include sentry frames in stacktraces to enable SDK crash detection ([#2050](https://github.com/getsentry/sentry-dart/pull/2050)) + ### Fixes - Event processor blocking transactions from being sent if `autoAppStart` is false ([#2028](https://github.com/getsentry/sentry-dart/pull/2028)) @@ -21,6 +25,9 @@ - Bump Cocoa SDK from v8.25.0 to v8.25.2 ([#2042](https://github.com/getsentry/sentry-dart/pull/2042)) - [changelog](https://github.com/getsentry/sentry-cocoa/blob/main/CHANGELOG.md#8252) - [diff](https://github.com/getsentry/sentry-cocoa/compare/8.25.0...8.25.2) +- Bump Android SDK from v7.8.0 to v7.9.0 ([#2049](https://github.com/getsentry/sentry-dart/pull/2049)) + - [changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md#790) + - [diff](https://github.com/getsentry/sentry-java/compare/7.8.0...7.9.0) ## 8.1.0 diff --git a/dart/lib/src/sentry_stack_trace_factory.dart b/dart/lib/src/sentry_stack_trace_factory.dart index b7f0504bb9..9d4a42bffc 100644 --- a/dart/lib/src/sentry_stack_trace_factory.dart +++ b/dart/lib/src/sentry_stack_trace_factory.dart @@ -15,18 +15,6 @@ class SentryStackTraceFactory { static final SentryStackFrame _asynchronousGapFrameJson = SentryStackFrame(absPath: ''); - static const _sentryPackagesIdentifier = [ - 'sentry', - 'sentry_flutter', - 'sentry_logging', - 'sentry_dio', - 'sentry_file', - 'sentry_hive', - 'sentry_isar', - 'sentry_sqflite', - 'sentry_drift', - ]; - SentryStackTraceFactory(this._options); /// returns the [SentryStackFrame] list from a stackTrace ([StackTrace] or [String]) @@ -38,13 +26,9 @@ class SentryStackTraceFactory { for (var t = 0; t < chain.traces.length; t += 1) { final trace = chain.traces[t]; + // NOTE: We want to keep the Sentry frames for crash detection + // this does not affect grouping since they're not marked as inApp for (final frame in trace.frames) { - // we don't want to add our own frames - if (frame.package != null && - _sentryPackagesIdentifier.contains(frame.package)) { - continue; - } - final stackTraceFrame = encodeStackTraceFrame(frame); if (stackTraceFrame != null) { frames.add(stackTraceFrame); diff --git a/dart/test/sentry_client_test.dart b/dart/test/sentry_client_test.dart index 89a5620acc..b10ae154f7 100644 --- a/dart/test/sentry_client_test.dart +++ b/dart/test/sentry_client_test.dart @@ -374,7 +374,7 @@ void main() { expect(capturedEvent.exceptions?[1].stackTrace, isNotNull); }); - test('should not capture sentry frames exception', () async { + test('should capture sentry frames exception', () async { fixture.options.addExceptionCauseExtractor( ExceptionWithCauseExtractor(), ); @@ -394,11 +394,11 @@ void main() { final capturedEnvelope = (fixture.transport).envelopes.first; final capturedEvent = await eventFromEnvelope(capturedEnvelope); - expect( - capturedEvent.exceptions?[1].stackTrace!.frames - .every((frame) => frame.package != 'sentry'), - true, - ); + final sentryFramesCount = capturedEvent.exceptions?[1].stackTrace!.frames + .where((frame) => frame.package == 'sentry') + .length; + + expect(sentryFramesCount, 2); }); }); @@ -494,22 +494,29 @@ void main() { expect(capturedEvent.exceptions?.first.stackTrace, isNull); }); - test('should not capture sentry frames exception', () async { + test('should capture sentry frames exception', () async { try { throw Exception('Error'); } catch (err) { exception = err; } + final stackTrace = ''' +#0 baz (file:///pathto/test.dart:50:3) + +#1 bar (file:///pathto/test.dart:46:9) +#2 capture (package:sentry/sentry.dart:46:9) + '''; + final client = fixture.getSut(); - await client.captureException(exception, stackTrace: stacktrace); + await client.captureException(exception, stackTrace: stackTrace); final capturedEnvelope = (fixture.transport).envelopes.first; final capturedEvent = await eventFromEnvelope(capturedEnvelope); expect( capturedEvent.exceptions?.first.stackTrace!.frames - .every((frame) => frame.package != 'sentry'), + .any((frame) => frame.package == 'sentry'), true, ); }); diff --git a/dart/test/stack_trace_test.dart b/dart/test/stack_trace_test.dart index 2bcf92c2c8..6524581794 100644 --- a/dart/test/stack_trace_test.dart +++ b/dart/test/stack_trace_test.dart @@ -254,11 +254,6 @@ isolate_instructions: 10fa27070, vm_instructions: 10fa21e20 final frames = Fixture() .getSut(considerInAppFramesByDefault: true) .getStackFrames(StackTrace.fromString(''' -#0 SentryClient._prepareEvent (package:sentry/src/sentry_client.dart:206:33) -#1 SentryClient.captureEvent (package:sentry/src/sentry_client.dart:74:34) -#2 Hub.captureEvent (package:sentry/src/hub.dart:97:38) - -#3 LoggingIntegration._onLog (package:sentry_logging/src/logging_integration.dart:58:7) ''')) .map((frame) => frame.toJson());