third_party/java/proguard/proguard6.2.2/docs/manual/retrace/usage.md
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. The stack trace must be encoded with UTF-8 encoding. Blank lines and unrecognized lines are ignored.
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:
| Wildcard | Description | Example |
|---|---|---|
%c | matches a class name | com.example.MyClass |
%C | matches a class name with slashes | com/example/MyClass |
%t | matches a field type or method return type | com.example.MyClass[] |
%f | matches a field name | myField |
%m | matches a method name | myMethod |
%a | matches a list of method arguments | boolean,int |
%s | matches a source file name | MyClass.java |
%l | matches a line number inside a method | 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" com.example.MyException: Some message
at com.example.MyClass.myMethod(MyClass.java: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.