Skip to content

Commit

Permalink
Include sentry frames to enable crash detection (#2050)
Browse files Browse the repository at this point in the history
* Updaet

* Add test

* Update test

* UpdatE

* Add changelog

* Fix analyze

* Update test
  • Loading branch information
buenaflor committed May 13, 2024
1 parent 0f067d3 commit 20eb554
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 32 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
20 changes: 2 additions & 18 deletions dart/lib/src/sentry_stack_trace_factory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,6 @@ class SentryStackTraceFactory {
static final SentryStackFrame _asynchronousGapFrameJson =
SentryStackFrame(absPath: '<asynchronous suspension>');

static const _sentryPackagesIdentifier = <String>[
'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])
Expand All @@ -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);
Expand Down
25 changes: 16 additions & 9 deletions dart/test/sentry_client_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
);
Expand All @@ -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);
});
});

Expand Down Expand Up @@ -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)
<asynchronous suspension>
#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,
);
});
Expand Down
5 changes: 0 additions & 5 deletions dart/test/stack_trace_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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)
<asynchronous suspension>
#3 LoggingIntegration._onLog (package:sentry_logging/src/logging_integration.dart:58:7)
<asynchronous suspension>
'''))
.map((frame) => frame.toJson());
Expand Down

0 comments on commit 20eb554

Please sign in to comment.