You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm not sure how to debug this issue.
To debug a specific crash, I enabled RxJava2Extensions assembly tracking for a part of my users.
For these users I see stackoverflow errors in my crash reporting tool.
I observe this with Timber 4.6.0 and on Android 5 and 6 (currently)
Fatal Exception: c.b.c.f: java.lang.StackOverflowError: stack size 1037KB
at io.reactivex.plugins.RxJavaPlugins.onError(SourceFile:349)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(SourceFile:69)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(SourceFile:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
Caused by java.lang.StackOverflowError: stack size 1037KB
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:122)
at java.lang.StringBuffer.append(StringBuffer.java:278)
at java.io.StringWriter.write(StringWriter.java:123)
at java.io.PrintWriter.doWrite(PrintWriter.java:623)
at java.io.PrintWriter.write(PrintWriter.java:601)
at java.io.PrintWriter.write(PrintWriter.java:579)
at java.io.PrintWriter.write(PrintWriter.java:660)
at java.io.PrintWriter.append(PrintWriter.java:722)
at java.io.PrintWriter.append(PrintWriter.java:691)
at java.io.PrintWriter.append(PrintWriter.java:31)
at java.lang.Throwable.printStackTrace(Throwable.java:315)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:349)
at java.lang.Throwable.printStackTrace(Throwable.java:300)
at timber.log.Timber$Tree.getStackTraceString(SourceFile:569)
at timber.log.Timber$Tree.prepareLog(SourceFile:544)
at timber.log.Timber$Tree.e(SourceFile:482)
at timber.log.Timber$1.e(SourceFile:336)
at my.package.name.misc.rx.loadingState.LoadingStateTransformer$contentOrError$1.apply(SourceFile:33)
at my.package.name.misc.rx.loadingState.LoadingStateTransformer$contentOrError$1.apply(SourceFile:13)
at io.reactivex.internal.operators.observable.ObservableOnErrorReturn$OnErrorReturnObserver.onError(SourceFile:73)
at hu.akarnokd.rxjava2.debug.ObservableOnAssembly$OnAssemblyObserver.onError(SourceFile:60)
at io.reactivex.internal.observers.BasicFuseableObserver.onError(SourceFile:100)
at hu.akarnokd.rxjava2.debug.ObservableOnAssembly$OnAssemblyObserver.onError(SourceFile:60)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$LatestCoordinator.drain(SourceFile:172)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$LatestCoordinator.innerError(SourceFile:261)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$CombinerObserver.onError(SourceFile:312)
at hu.akarnokd.rxjava2.debug.ObservableOnAssembly$OnAssemblyObserver.onError(SourceFile:60)
at io.reactivex.internal.observers.BasicFuseableObserver.onError(SourceFile:100)
at hu.akarnokd.rxjava2.debug.ObservableOnAssembly$OnAssemblyObserver.onError(SourceFile:60)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$LatestCoordinator.drain(SourceFile:172)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$LatestCoordinator.innerError(SourceFile:261)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$CombinerObserver.onError(SourceFile:312)
at hu.akarnokd.rxjava2.debug.ObservableOnAssembly$OnAssemblyObserver.onError(SourceFile:60)
at io.reactivex.internal.observers.BasicFuseableObserver.onError(SourceFile:100)
at my.package.name.shared.ObservableMapError$MapErrorObserver.onError(SourceFile:47)
at hu.akarnokd.rxjava.interop.ObservableV1ToObservableV2$ObservableSubscriber.onError(SourceFile:72)
at rx.internal.operators.OnSubscribeRedo$4$1.onError(SourceFile:326)
at rx.internal.operators.OperatorSwitch$SwitchSubscriber.checkTerminated(SourceFile:369)
at rx.internal.operators.OperatorSwitch$SwitchSubscriber.drain(SourceFile:300)
at rx.internal.operators.OperatorSwitch$SwitchSubscriber.onError(SourceFile:167)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(SourceFile:88)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(SourceFile:88)
at rx.internal.operators.OnSubscribeRedo$3$1.onNext(SourceFile:300)
at rx.internal.operators.OnSubscribeRedo$3$1.onNext(SourceFile:284)
at rx.internal.operators.NotificationLite.accept(SourceFile:135)
at rx.subjects.SubjectSubscriptionManager$SubjectObserver.emitNext(SourceFile:253)
at rx.subjects.BehaviorSubject.onNext(SourceFile:160)
at rx.observers.SerializedObserver.onNext(SourceFile:91)
at rx.subjects.SerializedSubject.onNext(SourceFile:67)
at rx.internal.operators.OnSubscribeRedo$2$1.onError(SourceFile:237)
at rx.internal.operators.OperatorTake$1.onError(SourceFile:65)
at rx.observers.SerializedObserver.onError(SourceFile:152)
at rx.observers.SerializedSubscriber.onError(SourceFile:78)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.innerError(SourceFile:192)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapInnerSubscriber.onError(SourceFile:340)
at rx.observers.Subscribers$5.onError(SourceFile:230)
at rx.internal.operators.NotificationLite.accept(SourceFile:132)
at rx.internal.operators.CachedObservable$ReplayProducer.replay(SourceFile:403)
at rx.internal.operators.CachedObservable$CacheState.dispatch(SourceFile:220)
at rx.internal.operators.CachedObservable$CacheState.onError(SourceFile:201)
at rx.internal.operators.CachedObservable$CacheState$1.onError(SourceFile:175)
at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(SourceFile:87)
at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(SourceFile:87)
at rx.exceptions.Exceptions.throwOrReport(SourceFile:212)
at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onError(SourceFile:144)
at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(SourceFile:266)
at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(SourceFile:818)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(SourceFile:579)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(SourceFile:568)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(SourceFile:276)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(SourceFile:88)
at rx.internal.operators.SingleLiftObservableOperator$WrapSubscriberIntoSingle.onError(SourceFile:81)
at hu.akarnokd.rxjava.interop.SingleV2ToSingleV1$SourceSingleObserver.onError(SourceFile:75)
at hu.akarnokd.rxjava2.debug.SingleOnAssembly$OnAssemblySingleObserver.onError(SourceFile:73)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SourceFile:69)
at hu.akarnokd.rxjava2.debug.SingleOnAssembly$OnAssemblySingleObserver.onError(SourceFile:73)
at io.reactivex.internal.operators.observable.ObservableSingleSingle$SingleElementObserver.onError(SourceFile:95)
at hu.akarnokd.rxjava2.debug.ObservableOnAssembly$OnAssemblyObserver.onError(SourceFile:60)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(SourceFile:63)
at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onError(SourceFile:72)
at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(SourceFile:55)
at io.reactivex.Observable.subscribe(SourceFile:11040)
at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(SourceFile:34)
at io.reactivex.Observable.subscribe(SourceFile:11040)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(SourceFile:96)
at io.reactivex.Scheduler$DisposeTask.run(SourceFile:463)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(SourceFile:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(SourceFile:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
The text was updated successfully, but these errors were encountered:
This isn't a problem with Timber. It's given an exception and it's rendering the stacktrace to a string.
You just have a really large stack. You should be able to use tricks like observeOn(trampoline()) to reduce the Rx stack size. Also it's likely that the exception you're passing has a lot of causes and/or suppressed exceptions which adds more to the stack.
There's no action to take on Timber's side as it only contributes 4 stack frames to this massively large stack trace.
In my case, the problem was in RxJavaAssembly tracing. It generated a stack trace with over 10,000 items where 99% of exceptions had the same object as a cause. That why when Throwable.printStackTrace() was called a StackOverflow exception occurred on low-end devices (Samsung S5 in my case). I've had the crash log just the same as yours.
Fixed by replacing RxJavaAssembly with RxTracer.
I'm not sure how to debug this issue.
To debug a specific crash, I enabled
RxJava2Extensions
assembly tracking for a part of my users.For these users I see stackoverflow errors in my crash reporting tool.
I observe this with Timber 4.6.0 and on Android 5 and 6 (currently)
The text was updated successfully, but these errors were encountered: