sentry-java icon indicating copy to clipboard operation
sentry-java copied to clipboard

Sentry for Java silently fails when using ProGuard

Open sproctor opened this issue 1 year ago • 5 comments

Integration

sentry

Java Version

17

Version

7.8.0

Steps to Reproduce

  1. build with proguard (ie Compose for Desktop gradle task proguardReleaseJars)
  2. Crash app
  3. Nothing is sent

Adding ProGuard rules from Android fixes this. It's never mentioned that they might be necessary. Better would be to crash on init when whatever is causing the failure is missing.

Expected Result

Crash report to be sent to sentry, obviously.

Actual Result

Crash is silently ignored.

sproctor avatar Apr 10 '24 02:04 sproctor

hi @sproctor, sorry you're having troubles, what rules did you add to make it work? We're not using proguard on JVM so were not simply aware of this issue.

romtsn avatar Apr 10 '24 08:04 romtsn

This is what I used:

-keep class io.sentry.** { *; }
-keepclassmembers enum io.sentry.** { *; }

sproctor avatar Apr 10 '24 11:04 sproctor

hm, these should not be needed for the sdk to work, could you perhaps share a reproducible project? Or enabled debug logs and share the output?

Sentry.init { it.isDebug = true }

romtsn avatar Apr 10 '24 11:04 romtsn

Stack trace:

INFO: Uncaught exception received.
DEBUG: Capturing event: 79ba499d0803417594513f3c39037588
DEBUG: Extracted 163 modules from resources.
INFO: Session is null on scope.withSession
ERROR: Error while capturing event with id: 79ba499d0803417594513f3c39037588
java.lang.AbstractMethodError: Receiver class io.a.k.k$$Lambda$230/0x00000008007769a0 does not define or inherit an implementation of the resolved method 'abstract void accept$56afaa06(b.b.b.i.bR)' of interface io.a.an.
	at io.a.am.a(SourceFile:933)
	at io.a.k.k.a(SourceFile:77)
	at io.a.ax.a(SourceFile:216)
	at io.a.r.a(SourceFile:120)
	at io.a.r.a(SourceFile:90)
	at io.a.aq.a(SourceFile:525)
	at io.a.s.a(SourceFile:30)
	at io.a.bJ.uncaughtException(SourceFile:109)
	at java.base/java.lang.ThreadGroup.uncaughtException(Unknown Source)
	at java.base/java.lang.ThreadGroup.uncaughtException(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.processException(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

Relevant mappings

androidx.compose.foundation.text.TextDelegate -> b.b.b.i.br:
# {"fileName":"TextDelegate.kt","id":"sourceFile"}
io.sentry.util.TracingUtils -> io.a.k.k:
# {"fileName":"TracingUtils.java","id":"sourceFile"}
    77:77:androidx.compose.foundation.text.TextFieldKeyInputKt maybeUpdateBaggage$4d1dbfc4(io.sentry.IScope,io.sentry.SentryOptions) -> a
    79:88:void lambda$maybeUpdateBaggage$3$6f99b2d6(io.sentry.SentryOptions,io.sentry.IScope,androidx.compose.foundation.text.TextFieldKeyInputKt) -> a
io.sentry.Scope$IWithPropagationContext -> io.a.an:
# {"fileName":"Scope.java","id":"sourceFile"}
    void accept$56afaa06(androidx.compose.foundation.text.TextFieldKeyInputKt) -> accept$56afaa06
io.sentry.Scope -> io.a.am:
# {"fileName":"Scope.java","id":"sourceFile"}
    io.sentry.SentryLevel level -> a
io.sentry.util.TracingUtils -> io.a.k.k:
# {"fileName":"TracingUtils.java","id":"sourceFile"}
    77:77:androidx.compose.foundation.text.TextFieldKeyInputKt maybeUpdateBaggage$4d1dbfc4(io.sentry.IScope,io.sentry.SentryOptions) -> a
    79:88:void lambda$maybeUpdateBaggage$3$6f99b2d6(io.sentry.SentryOptions,io.sentry.IScope,androidx.compose.foundation.text.TextFieldKeyInputKt) -> a
io.sentry.SentryClient -> io.a.ax:
# {"fileName":"SentryClient.java","id":"sourceFile"}
    io.sentry.SentryOptions options -> a
io.sentry.Hub -> io.a.r:
# {"fileName":"Hub.java","id":"sourceFile"}
    io.sentry.protocol.SentryId lastEventId -> a
io.sentry.Sentry -> io.a.aq:
# {"fileName":"Sentry.java","id":"sourceFile"}
    java.lang.ThreadLocal currentHub -> a
io.sentry.HubAdapter -> io.a.s:
# {"fileName":"HubAdapter.java","id":"sourceFile"}
    io.sentry.HubAdapter INSTANCE -> a
io.sentry.UncaughtExceptionHandlerIntegration -> io.a.bJ:
# {"fileName":"UncaughtExceptionHandlerIntegration.java","id":"sourceFile"}
    92:141:void uncaughtException(java.lang.Thread,java.lang.Throwable) -> uncaughtException
    1147:1150:java.lang.Throwable getUnhandledThrowable(java.lang.Thread,java.lang.Throwable):147:150 -> uncaughtException
    1147:1150:void uncaughtException(java.lang.Thread,java.lang.Throwable):98 -> uncaughtException
    2049:2051:io.sentry.Hint io.sentry.util.HintUtils.createWithTypeCheckHint(java.lang.Object):49:51 -> uncaughtException
    2049:2051:void uncaughtException(java.lang.Thread,java.lang.Throwable):107 -> uncaughtException
    2055:2056:void io.sentry.util.HintUtils.setTypeCheckHint(io.sentry.Hint,java.lang.Object):55:56 -> uncaughtException
    2055:2056:io.sentry.Hint io.sentry.util.HintUtils.createWithTypeCheckHint(java.lang.Object):50 -> uncaughtException
    2055:2056:void uncaughtException(java.lang.Thread,java.lang.Throwable):107 -> uncaughtException
    3045:3045:io.sentry.hints.EventDropReason io.sentry.util.HintUtils.getEventDropReason(io.sentry.Hint):45:45 -> uncaughtException
    3045:3045:void uncaughtException(java.lang.Thread,java.lang.Throwable):111 -> uncaughtException

sproctor avatar Apr 10 '24 12:04 sproctor

@sproctor thanks for the additional details, we need to investigate this more an will follow up

kahest avatar Apr 12 '24 11:04 kahest