diff --git a/CHANGELOG.md b/CHANGELOG.md index c945a7d78e..4bd6e7eeca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -# Unreleased +## Unreleased ### Features @@ -8,6 +8,7 @@ ### Internal +- Establish new native exception mechanisms to differentiate events generated by `sentry-native` from `ApplicationExitInfo`. ([#5052](https://github.com/getsentry/sentry-java/pull/5052)) - Set `write` permission for `statuses` in the changelog preview GHA workflow. ([#5053](https://github.com/getsentry/sentry-java/pull/5053)) ## 8.31.0 diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java new file mode 100644 index 0000000000..2dad712b19 --- /dev/null +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java @@ -0,0 +1,21 @@ +package io.sentry.android.core.internal.tombstone; + +import androidx.annotation.NonNull; + +/** Mechanism types for native crashes. */ +public enum NativeExceptionMechanism { + TOMBSTONE("Tombstone"), + SIGNAL_HANDLER("signalhandler"), + TOMBSTONE_MERGED("TombstoneMerged"); + + private final @NonNull String value; + + NativeExceptionMechanism(@NonNull final String value) { + this.value = value; + } + + @NonNull + public String getValue() { + return value; + } +} diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java index 18ad8ec825..18c10fac44 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java @@ -142,9 +142,7 @@ private static Mechanism createMechanismFromSignalInfo( @NonNull final TombstoneProtos.Signal signalInfo) { final Mechanism mechanism = new Mechanism(); - // this follows the current processing triggers strictly, changing any of these - // alters grouping and name (long-term we might want to have a tombstone mechanism) - mechanism.setType("signalhandler"); + mechanism.setType(NativeExceptionMechanism.TOMBSTONE.getValue()); mechanism.setHandled(false); mechanism.setSynthetic(true); diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt index efb1e963a1..954ad0eccc 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt @@ -72,7 +72,7 @@ class TombstoneParserTest { assertNotNull(crashedThreadId) val mechanism = exception.mechanism - assertEquals("signalhandler", mechanism!!.type) + assertEquals("Tombstone", mechanism!!.type) assertEquals(false, mechanism.isHandled) assertEquals(true, mechanism.synthetic) assertEquals("SIGSEGV", mechanism.meta!!["name"])