如何从模糊的错误消息中找到有问题的类



我的android应用程序发生崩溃,导致以下堆栈跟踪。这个应用程序是proguard的,我有映射文件。正如您所看到的,除了IllegalStateException的消息之外,堆栈争用是正确的。那里的片段的名称仍然是a。我如何才能找出哪个片段实际上导致了问题,从而解决问题。我有我的怀疑,但这是一个相当大的应用程序,我在其中使用了很多碎片。不幸的是,我无法再现坠机事件——它发生在野外。

我已经搜索了Fragment -> aFragment -> **.a的所有出现,并找到了一些可能性,但我仍然不确定,我正在寻找正确的可能性。

所以我有两个问题:

  1. 我能以某种方式从消息中删除a吗
  2. 有没有一个工具可以加载映射并可视化所有被混淆为a的类

已卸载的堆栈跟踪(消息中有a(:

java.lang.IllegalStateException: Fragment already added: a{957db5c} (3bdece50-8a03-4b3b-aca9-85a6d2be9e93) id=0x7f09019d}
at androidx.fragment.app.FragmentStore.addFragment(FragmentStore.java:67)
at androidx.fragment.app.FragmentManager.addFragment(FragmentManager.java:1563)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:405)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

混淆的堆栈跟踪:

java.lang.IllegalStateException: Fragment already added: a{957db5c} (3bdece50-8a03-4b3b-aca9-85a6d2be9e93) id=0x7f09019d}
at l0.l.d.a0.a(FragmentStore.java:7)
at l0.l.d.r.b(FragmentManager.java:4)
at l0.l.d.a.m(BackStackRecord.java:27)
at l0.l.d.r.C(FragmentManager.java:51)
at l0.l.d.r.Y(FragmentManager.java:10)
at l0.l.d.r.B(FragmentManager.java:14)
at l0.l.d.r$d.run(FragmentManager.java:1)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

我不确定你的第一个问题,但我知道Google play控制台允许你加载映射并可视化所有被混淆的类。

恐怕deobfusation无法解决您的问题,因为打印行

Fragment already added: a{957db5c} (3bdece50-8a03-4b3b-aca9-85a6d2be9e93) id=0x7f09019d}

是在运行时使用类名生成的字符串。您可以在此处检查生成此字符串的方法。你可以为你的片段设置一个标签,然后你可以发现哪些片段被添加了两次。

相关内容

最新更新