Skip to content

Commit c6897c1

Browse files
romtsnclaudebuenaflor
authored
Add enableTombstone option for native crash reporting on Android (#3526)
* feat(flutter): Add enableTombstone option for improved native crash reporting Add `enableTombstone` option to SentryFlutterOptions that enables tombstone-based native crash reporting on Android 12+ (API level 30+). When enabled, uses Android's `ApplicationExitInfo.REASON_CRASH_NATIVE` to capture native crashes with more detailed thread information. The option is disabled by default. Slack thread: https://sentry.slack.com/archives/CP4UUUF1S/p1771404252312029?thread_ts=1769055443.846779&cid=CP4UUUF1S https://claude.ai/code/session_016kkosYW3XG2rhHafEfspqA * Apply suggestion from @romtsn * Add integration test * Enable tombstone option in integration test --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Giancarlo Buenaflor <giancarlobuenaflor97@gmail.com> Co-authored-by: Giancarlo Buenaflor <giancarlo.buenaflor@sentry.io>
1 parent 4cec133 commit c6897c1

File tree

5 files changed

+24
-0
lines changed

5 files changed

+24
-0
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
## Unreleased
44

5+
### Features
6+
7+
- Add `enableTombstone` option for improved native crash reporting on Android 12+ ([#3526](https://github.com/getsentry/sentry-dart/pull/3526))
8+
- When enabled, uses Android's `ApplicationExitInfo.REASON_CRASH_NATIVE` to capture native crashes with more detailed thread information
9+
- Disabled by default
10+
511
### Fixes
612

713
- Dont guard user attributes behind `sendDefaultPii` for logs and metrics ([#3524](https://github.com/getsentry/sentry-dart/pull/3524))

packages/flutter/example/integration_test/integration_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ void main() {
217217
options.anrTimeoutInterval = const Duration(seconds: 2);
218218
options.connectionTimeout = const Duration(milliseconds: 1234);
219219
options.readTimeout = const Duration(milliseconds: 2345);
220+
options.enableTombstone = true;
220221
});
221222
});
222223

@@ -280,12 +281,15 @@ void main() {
280281
expect(findMatchingPackage, isNotNull);
281282
}
282283
expect(androidOptions.isEnableAutoTraceIdGeneration(), isFalse);
284+
expect(androidOptions.isTombstoneEnabled(), isTrue);
285+
283286
final androidProxy = androidOptions.getProxy();
284287
expect(androidProxy, isNotNull);
285288
expect(androidProxy!.getHost()?.toDartString(), 'proxy.local');
286289
expect(androidProxy.getPort()?.toDartString(), '8084');
287290
expect(androidProxy.getUser()?.toDartString(), 'u');
288291
expect(androidProxy.getPass()?.toDartString(), 'p');
292+
289293
final r = androidOptions.getSessionReplay();
290294
expect(r.getQuality(), jni.SentryReplayOptions$SentryReplayQuality.HIGH);
291295
expect(r.getSessionSampleRate(), isNotNull);

packages/flutter/lib/src/native/java/sentry_native_java_init.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ void configureAndroidOptions({
215215
androidOptions
216216
.setAnrTimeoutIntervalMillis(options.anrTimeoutInterval.inMilliseconds);
217217
androidOptions.setAnrEnabled(options.anrEnabled);
218+
androidOptions.setTombstoneEnabled(options.enableTombstone);
218219
androidOptions.setAttachThreads(options.attachThreads);
219220
androidOptions.setAttachStacktrace(options.attachStacktrace);
220221

packages/flutter/lib/src/sentry_flutter_options.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ class SentryFlutterOptions extends SentryOptions {
6868
/// Available only for Android. Enabled by default.
6969
bool anrEnabled = true;
7070

71+
/// Enable or disable Tombstone reporting for improved native crash reporting.
72+
/// When enabled, uses Android's `ApplicationExitInfo.REASON_CRASH_NATIVE` to
73+
/// capture native crashes with more detailed thread information.
74+
/// Available only for Android 12+ (API level 30+). Disabled by default.
75+
bool enableTombstone = false;
76+
7177
Duration _anrTimeoutInterval = Duration(milliseconds: 5000);
7278

7379
/// ANR Timeout internal. Default is 5000 milliseconds or 5 seconds.

packages/flutter/test/sentry_flutter_options_test.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,12 @@ void main() {
5151
expect(options.enableMemoryPressureBreadcrumbs, isTrue);
5252
expect(options.enableAutoNativeBreadcrumbs, isFalse);
5353
});
54+
55+
testWidgets('enableTombstone defaults to false',
56+
(WidgetTester tester) async {
57+
final options = defaultTestOptions();
58+
59+
expect(options.enableTombstone, isFalse);
60+
});
5461
});
5562
}

0 commit comments

Comments
 (0)