如何减少ACRA中的堆栈跟踪?

时间:2017-10-24 15:38:06

标签: android acra

我是通过ACRA从Android应用发送崩溃报告,一切都很好。除了堆栈跟踪很大的事实。例如,一个报告可以包含大约30000个字符,如下所示:

{
  "REPORT_ID": "bb7cef15-ffc0-4e58-ada2-0472a5c02939",
  "APP_VERSION_CODE": 1,
  "APP_VERSION_NAME": 1.8,
  "PHONE_MODEL": "Nexus 5",
  "ANDROID_VERSION": "6.0.1",
  "STACK_TRACE": "io.reactivex.exceptions.CompositeException: 2 exceptions occurred. \n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n  ComposedException 1 :\n\tandroid.nfc.TagLostException: Tag was lost.\n\t\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\t\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\t\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$3$BalancePresenter(BalancePresenter.java:49)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda$3.apply(Unknown Source)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\t\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\t\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\t\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\t\tat java.lang.Thread.run(Thread.java:818)\n\tCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\t\tat android.util.Log.getStackTraceString(Log.java:338)\n\t\tat android.util.Log.e(Log.java:243)\n\t\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\t\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\t\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\t\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n  ComposedException 2 :\n\tjava.lang.Exception: android.nfc.TagLostException: Tag was lost.\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$14$BalancePresenter(BalancePresenter.java:69)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda$14.accept(Unknown Source)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n\tCaused by: android.nfc.TagLostException: Tag was lost.\n\t\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\t\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\t\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$3$BalancePresenter(BalancePresenter.java:49)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda$3.apply(Unknown Source)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\t\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\t\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\t\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\t\tat java.lang.Thread.run(Thread.java:818)\n\tCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\t\tat android.util.Log.getStackTraceString(Log.java:338)\n\t\tat android.util.Log.e(Log.java:243)\n\t\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\t\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\t\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\t\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n\nio.reactivex.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received =>\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\nCaused by: android.nfc.TagLostException: Tag was lost.\n\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$3$BalancePresenter(BalancePresenter.java:49)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda$3.apply(Unknown Source)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\tat java.lang.Thread.run(Thread.java:818)\nCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\nandroid.nfc.TagLostException: Tag was lost.\n\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$3$BalancePresenter(BalancePresenter.java:49)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda$3.apply(Unknown Source)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\tat java.lang.Thread.run(Thread.java:818)\nCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\njava.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat ...",
  "USER_APP_START_DATE": "2017-10-24T18:17:42.006+03:00",
  "USER_CRASH_DATE": "2017-10-24T18:17:44.713+03:00",
  "IS_SILENT": false
}

我可以以某种方式减少" STACK_TRACE"领域?例如,我可以从堆栈跟踪中仅发送几个起始行吗?

1 个答案:

答案 0 :(得分:0)

创建自定义ReportSender(扩展其中一个默认值),并在发送之前修改报告。

您可以使用ReportSender

注册自定义@ReportsCrashes.reportSenderFactoryClasses