Usage

You can find the ReTrace jar in the lib directory of the ProGuard distribution. To run ReTrace, just type:

java -jar retrace.jar [options...] mapping_file [stacktrace_file]

Alternatively, the bin directory contains some short Linux and Windows scripts containing this command. These are the arguments:
mapping_file
Specifies the name of the mapping file, produced by ProGuard with the option "-printmapping mapping_file", while obfuscating the application that produced the stack trace.
stacktrace_file
Optionally specifies the name of the file containing the stack trace. If no file is specified, a stack trace is read from the standard input. Blank lines and unrecognized lines are ignored, as far as possible.
The following options are supported:
-verbose
Specifies to print out more informative stack traces that include not only method names, but also method return types and arguments.
-regex regular_expression
Specifies the regular expression that is used to parse the lines in the stack trace. Specifying a different regular expression allows to de-obfuscate more general types of input than just stack traces. The default is suitable for stack traces produced by most JVMs:
(?:.*?\bat\s+%c\.%m\s*\(%s(?::%l)?\)\s*)|(?:(?:.*?[:"]\s+)?%c(?::.*)?)
    
The regular expression is a Java regular expression (cfr. the documentation of java.util.regex.Pattern), with a few additional wildcards:
%c matches a class name (e.g. "myapplication.MyClass").
%C matches a class name with slashes (e.g. "myapplication/MyClass").
%t matches a field type or method return type (e.g. "myapplication.MyClass[]").
%f matches a field name (e.g. "myField").
%m matches a method name (e.g. "myMethod").
%a matches a list of method arguments (e.g. "boolean,int").
%s matches a source file name (e.g. "MyClass.java").
%l matches a line number inside a method (e.g. "123").
Elements that match these wildcards are de-obfuscated, when possible. Note that regular expressions must not contain any capturing groups. Use non-capturing groups instead: (?:...)

The default expression for instance matches the following lines:

Exception in thread "main" myapplication.MyException: Some message
        at myapplication.MyClass.myMethod(SourceFile:123)
    
The restored stack trace is printed to the standard output. The completeness of the restored stack trace depends on the presence of line number tables in the obfuscated class files:

Preserving line number tables is explained in detail in this example in the ProGuard User Manual.

Source file names are currently restored based on the names of the outer-most classes. If you prefer to keep the obfuscated name, you can replace %s in the default regular expression by .*

Unobfuscated elements and obfuscated elements for which no mapping is available will be left unchanged.


Copyright © 2002-2015 Eric Lafortune @ GuardSquare.