2011-06-07 61 views
6

我一直在使用proguard内置的eclipse工具obsucate代码,它工作正常。但是,当我尝试追溯混淆代码的堆栈跟踪时,回溯不会输出未混淆的堆栈跟踪。Proguard回溯没有映射堆栈跟踪到实际的源

我已经仔细检查了mapping.txt,以确定我使用的是正确的。

这里是我的堆栈跟踪

ERROR/AndroidRuntime(19398): 
FATAL EXCEPTION: Thread-35 
ERROR/AndroidRuntime(19398): java.lang.NullPointerException 
ERROR/AndroidRuntime(19398):  at android.graphics.Canvas.throwIfRecycled(Canvas.java:954) 
ERROR/AndroidRuntime(19398):  at android.graphics.Canvas.drawBitmap(Canvas.java:980) 
ERROR/AndroidRuntime(19398):  at com.excelectronic.b.aa.a(ProGuard:535) 
ERROR/AndroidRuntime(19398):  at com.excelectronic.g.f.a(ProGuard:220) 
ERROR/AndroidRuntime(19398):  at com.excelectronic.game.GameView.a(ProGuard:198) 
ERROR/AndroidRuntime(19398):  at com.excelectronic.game.GameView.onDraw(ProGuard:98) 
ERROR/AndroidRuntime(19398):  at com.excelectronic.game.ac.run(ProGuard:121) 

并且使用命令

retrace.bat -verbose mapping.txt obfuscated_trace.txt 

回答

15

默认的ProGuard的回扫工具预计堆栈跟踪被很好地格式化,他们在Java打印出来的方式。这意味着它期望在适当的地方换行并且没有像“ERROR/AndroidRuntime(19398)”这样的前缀。

或者,您可以修改ReTrace用于解析堆栈跟踪的正则表达式。

+0

如何传递常规expr模式?有什么选择? – Gopinath 2012-07-08 11:24:45

+0

@Gopinath Cfr。手册。 – 2012-07-14 20:35:16

1

使用traceview在使用ReTrace之前提取原始Java堆栈跟踪。

+0

你究竟如何做到这一点? – 2012-12-10 15:36:20

+0

对不起,我现在无法工作。独立的traceview现在已被弃用。 – 2012-12-11 06:35:44

+0

这里有一个简单的正则表达式:'。*(:\ u0020)' – 2012-12-11 06:43:39