Kotlin 代码堆栈跟踪显示 Java 行号
Posted
技术标签:
【中文标题】Kotlin 代码堆栈跟踪显示 Java 行号【英文标题】:Kotlin code stack trace shows Java line numbers 【发布时间】:2019-03-28 22:13:14 【问题描述】:我正在尝试在 Google Play 商店中为我的应用程序调试几次崩溃,但 Play 商店中显示的堆栈跟踪显示的是 Java 文件名和行号,而不是对我的 Kotlin 代码的直接引用。我在 android Studio 中查看了 Java 代码,但行号不匹配。
为了查看 Java 代码,我转换为字节码,然后反编译为 Java。 Android Studio 中还有一个更直接的选项可以“将 Kotlin 反编译为 Java”,但该选项已禁用;我希望这能让我更好地匹配堆栈跟踪。
如何使用我在 Play 商店的崩溃报告中看到的堆栈跟踪信息来识别我的 Kotlin 源代码中的问题?
【问题讨论】:
尝试“分析堆栈跟踪”,行号应该可以点击。 @Miha_x64 堆栈跟踪来自 Google Play 商店的崩溃报告 是的,只需将其复制并粘贴到 AS/IDEA 中的“分析堆栈跟踪”中即可。 谢谢!你能把它作为一个答案让我接受吗? 要反编译成 Java,请参见 ***.com/a/54116131/2914140。 【参考方案1】:复制您的堆栈跟踪,打开 Android Studio 或 IntelliJ IDEA,单击分析 -> 分析堆栈跟踪,粘贴并单击确定。 带有线条的类名将变为可点击,并且点击应该可以正常工作。
【讨论】:
请查看关于 SO 的问题应该如何提问。您不能只要求社区为您查找文章、教程或编写代码。你必须尝试自己解决它,当你遇到困难时,就你面临的问题提出一个具体的问题。 我猜你放在这里的评论不是要显示在这里? 抱歉,线条变得只能点击,仅此而已。没有对原始 Kotlin 代码的引用。例如,SelectRaduisFragment.access$centerLocation(Unknown Source:97)
.
Unknown Source
表示LineNumberTable
被混淆了一点。尝试使用retrace
或手动修复堆栈跟踪(例如,将Unknown Source
替换为SelectRaduisFragment
)。
@Miha_x64,在反编译成 Java 一个小时后,我得到了一个巨大的 Java 文件。崩溃日志没有指向更接近 Kotlin,也没有反编译代码。我怀疑它指向 Java lambdas。我不知道,如何回溯。【参考方案2】:
回答更新,在Android Studio 4.1中,菜单选项好像变了:
Analyze -> Stack Trace or Thread Dump...
【讨论】:
以上是关于Kotlin 代码堆栈跟踪显示 Java 行号的主要内容,如果未能解决你的问题,请参考以下文章