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 行号的主要内容,如果未能解决你的问题,请参考以下文章

在发布模式下显示 .NET 程序集的堆栈跟踪中的行号

Node.JS + TypeScript如何从堆栈跟踪中跟踪源代码?

Google Play 控制台堆栈跟踪

UWP 应用的堆栈跟踪中的行号

如何使用带有行号信息的 gcc 获取 C++ 的堆栈跟踪?

Proguard 不保留堆栈跟踪中的行号和方法名称