Tools | Stack Trace Translate
Overview
The "Stack Trace Translate" tool translates a stack trace produced by obfuscated bytecode by replacing obfuscated class and method names with the unobfuscated equivalents.
If you used Zelix KlassMaster's line number scrambling feature then the scrambled line numbers will be translated to the original numbers.
The tool reads the change log that you created when obfuscating your classes and, ideally, it will also analyze the obfuscated bytecode itself.
By analyzing the obfuscated bytecode, the Stack Trace Translate tool can usually identify a single original method for each obfuscated method name in the stack trace,
even if line numbers are not present in the stack trace.
Alternatively, if you do not specify the path to your obfuscated bytecode, then the Stack Trace Translate tool will not be able to distinguish between overloaded obfuscated method names
and it will have to present you with a list of possible alternative original method names.
Note that there is also an API that allows you to call the Stack Trace Translate tool from another program.
Obfuscated stack trace
Exception in thread "main" java.lang.NullPointerException
at a.a.c.a(c.java:7)
at a.a.b.a(b.java:7)
at a.a.a.a(a.java:3)
at a.a.a.main(a.java:10)
Translated stack trace if obfuscated bytecode is analyzed
Exception in thread "main" java.lang.NullPointerException
at com.mycompany.MyClass2.method1(String)(MyClass2.java:9)
at com.mycompany.MyClass1.method1(String)(MyClass1.java:9)
at com.mycompany.MyClass0.method1(String)(MyClass0.java:9)
at com.mycompany.MyClass0.main(String[])(MyClass0.java:25)
Translated stack trace if obfuscated bytecode is NOT analyzed
NOTE: Obfuscated bytecode not analyzed so there could be multiple possible methods for each trace line.
Exception in thread "main" java.lang.NullPointerException
at com.mycompany.MyClass2.method1(String)
method2()
at com.mycompany.MyClass1.method1(String)
method2()
at com.mycompany.MyClass0.method1(String)
method2()
method3(String, int)
at com.mycompany.MyClass0.main(String[])(MyClass0.java:25)
|