72

当我得到这样的东西

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)

我怎样才能知道问题出在哪里并调试这个问题?我只得到了 ProGuard 的映射输出,不知道行号。谢谢。

4

5 回答 5

115

将以下行添加到您的 proguard 配置中。

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

现在您的堆栈跟踪将包含行号,并且通过使用 proguard 附带的回溯工具(包含在 Android SDK 中),您可以像往常一样进行调试。

请注意,即使您没有使用这两个配置选项,只要您拥有映射文件,retrace 仍然可以输出有用的信息,尽管并非完全明确。

注意:带有映射的文件是由 proguard 配置选项生成的:

 -printmapping outputfile.txt

在 Android SDK 附带的 ant 文件中,它被设置为 mapping.txt。

祝你好运。

于 2011-07-12T19:50:09.923 回答
15

要使用您的 Android Market 帐户中的任何堆栈跟踪,您可以使用-printmapping通过 ProGuard 配置中的选项生成的映射文件和 ReTrace(ProGuard 配套工具)来解码堆栈跟踪。您也可以使用地图文件的内容手动解码,但这很乏味。

在示例下的 ProGuard 手册中,有一节关于生成有用的混淆堆栈跟踪,包括如何保留行号。

不幸的是,如果您没有将 ProGuard 设置为保留行号,那么您将只能识别引发异常的方法。

于 2010-10-13T09:03:35.673 回答
6

要回溯混淆的 ProGuard 文件,请执行以下步骤:

  1. 您需要安装 Proguard。

  2. Proguard 为您提供了一个 UI 模式,这是一个很好的回溯工具。

  3. 打开你在 MAC 机器中找到的 proguardgui.sh

    /Users/{name}/Library/Android/sdk/tools/proguard/bin/proguardgui.sh
    

    您可以通过终端运行它。

proguardgui

  1. 然后你可以输入你的映射文件和你想要回溯的片段,它应该被回溯

proguardgui 输出

于 2020-05-21T11:29:24.780 回答
4

将堆栈跟踪粘贴到 stack_trace.txt

运行以下命令: java -jar retrace.jar classes-processed.map stack_trace.txt

retrace.jar 位于 sdk\tools\proguard\lib\retrace.jar classes-processed.map 是 proguard 混淆时生成的输出文件

于 2015-08-05T18:56:50.970 回答
0

这是 Android SDK 中有关回溯工具的官方文档的链接:https ://developer.android.com/studio/build/shrink-code#decode-stack-trace

这篇文章也不错:https ://medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379

对于所有复制粘贴的兄弟:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
于 2019-02-25T19:36:34.547 回答