aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/java/proguard/proguard5.3.3/docs/manual/retrace/examples.html
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/java/proguard/proguard5.3.3/docs/manual/retrace/examples.html')
-rw-r--r--third_party/java/proguard/proguard5.3.3/docs/manual/retrace/examples.html182
1 files changed, 182 insertions, 0 deletions
diff --git a/third_party/java/proguard/proguard5.3.3/docs/manual/retrace/examples.html b/third_party/java/proguard/proguard5.3.3/docs/manual/retrace/examples.html
new file mode 100644
index 0000000000..ec2a99bbc3
--- /dev/null
+++ b/third_party/java/proguard/proguard5.3.3/docs/manual/retrace/examples.html
@@ -0,0 +1,182 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="../style.css">
+<title>ReTrace Examples</title>
+</head>
+<body>
+
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ document.write('<a class="largebutton" target="_top" href="../../index.html#manual/retrace/examples.html">ProGuard index</a> <a class="largebutton" target="_top" href="http://www.guardsquare.com/dexguard">DexGuard</a> <a class="largebutton" target="_top" href="http://www.guardsquare.com/">GuardSquare</a> <a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a>')
+//-->
+</script>
+<noscript>
+<a class="largebutton" target="_top" href="../../index.html#manual/retrace/examples.html">ProGuard index</a>
+<a class="largebutton" target="_top" href="http://www.guardsquare.com/dexguard">DexGuard</a>
+<a class="largebutton" target="_top" href="http://www.guardsquare.com/">GuardSquare</a>
+<a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a>
+</noscript>
+
+<h2>Examples</h2>
+
+Some typical example uses:
+<ol>
+<li><a href="#with">Restoring a stack trace with line numbers</a></li>
+<li><a href="#withverbose">Restoring a stack trace with line numbers
+ (verbose)</a></li>
+<li><a href="#without">Restoring a stack trace without line numbers</a></li>
+</ol>
+
+<h3><a name="with">Restoring a stack trace with line numbers</a></h3>
+
+Assume for instance ProGuard itself has been obfuscated using the following
+extra options:
+<pre>
+-printmapping mapping.txt
+
+-renamesourcefileattribute MyApplication
+-keepattributes SourceFile,LineNumberTable
+</pre>
+<p>
+
+Now assume the processed application throws an exception:
+<pre>
+java.io.IOException: Can't read [dummy.jar] (No such file or directory)
+ at proguard.y.a(MyApplication:188)
+ at proguard.y.a(MyApplication:158)
+ at proguard.y.a(MyApplication:136)
+ at proguard.y.a(MyApplication:66)
+ at proguard.ProGuard.c(MyApplication:218)
+ at proguard.ProGuard.a(MyApplication:82)
+ at proguard.ProGuard.main(MyApplication:538)
+Caused by: java.io.IOException: No such file or directory
+ at proguard.d.q.a(MyApplication:50)
+ at proguard.y.a(MyApplication:184)
+ ... 6 more
+</pre>
+<p>
+
+If we have saved the stack trace in a file <code>stacktrace.txt</code>, we can
+use the following command to recover the stack trace:
+<pre>
+<b>java -jar retrace.jar mapping.txt stacktrace.txt</b>
+</pre>
+<p>
+
+The output will correspond to the original stack trace:
+<pre>
+java.io.IOException: Can't read [dummy.jar] (No such file or directory)
+ at proguard.InputReader.readInput(InputReader.java:188)
+ at proguard.InputReader.readInput(InputReader.java:158)
+ at proguard.InputReader.readInput(InputReader.java:136)
+ at proguard.InputReader.execute(InputReader.java:66)
+ at proguard.ProGuard.readInput(ProGuard.java:218)
+ at proguard.ProGuard.execute(ProGuard.java:82)
+ at proguard.ProGuard.main(ProGuard.java:538)
+Caused by: java.io.IOException: No such file or directory
+ at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:50)
+ at proguard.InputReader.readInput(InputReader.java:184)
+ ... 6 more
+</pre>
+
+<h3><a name="withverbose">Restoring a stack trace with line numbers (verbose)</a></h3>
+
+In the previous example, we could also use the verbose flag:
+<pre>
+<b>java -jar retrace.jar -verbose mapping.txt stacktrace.txt</b>
+</pre>
+<p>
+
+The output will then look as follows:
+<pre>
+java.io.IOException: Can't read [dummy.jar] (No such file or directory)
+ at proguard.InputReader.void readInput(java.lang.String,proguard.ClassPathEntry,proguard.io.DataEntryReader)(InputReader.java:188)
+ at proguard.InputReader.void readInput(java.lang.String,proguard.ClassPath,int,int,proguard.io.DataEntryReader)(InputReader.java:158)
+ at proguard.InputReader.void readInput(java.lang.String,proguard.ClassPath,proguard.io.DataEntryReader)(InputReader.java:136)
+ at proguard.InputReader.void execute(proguard.classfile.ClassPool,proguard.classfile.ClassPool)(InputReader.java:66)
+ at proguard.ProGuard.void readInput()(ProGuard.java:218)
+ at proguard.ProGuard.void execute()(ProGuard.java:82)
+ at proguard.ProGuard.void main(java.lang.String[])(ProGuard.java:538)
+Caused by: java.io.IOException: No such file or directory
+ at proguard.io.DirectoryPump.void pumpDataEntries(proguard.io.DataEntryReader)(DirectoryPump.java:50)
+ at proguard.InputReader.void readInput(java.lang.String,proguard.ClassPathEntry,proguard.io.DataEntryReader)(InputReader.java:184)
+ ... 6 more
+</pre>
+
+
+<h3><a name="without">Restoring a stack trace without line numbers</a></h3>
+
+Assume for instance ProGuard itself has been obfuscated using the following
+extra options, this time without preserving the line number tables:
+<pre>
+-printmapping mapping.txt
+</pre>
+<p>
+
+A stack trace <code>stacktrace.txt</code> will then lack line number
+information, showing "Unknown source" instead:
+<pre>
+java.io.IOException: Can't read [dummy.jar] (No such file or directory)
+ at proguard.y.a(Unknown Source)
+ at proguard.y.a(Unknown Source)
+ at proguard.y.a(Unknown Source)
+ at proguard.y.a(Unknown Source)
+ at proguard.ProGuard.c(Unknown Source)
+ at proguard.ProGuard.a(Unknown Source)
+ at proguard.ProGuard.main(Unknown Source)
+Caused by: java.io.IOException: No such file or directory
+ at proguard.d.q.a(Unknown Source)
+ ... 7 more
+</pre>
+<p>
+
+We can still use the same command to recover the stack trace:
+<pre>
+<b>java -jar retrace.jar mapping.txt stacktrace.txt</b>
+</pre>
+<p>
+
+The output will now list all alternative original method names for each
+ambiguous obfuscated method name:
+<pre>
+java.io.IOException: Can't read [dummy.jar] (No such file or directory)
+ at proguard.InputReader.execute(InputReader.java)
+ readInput(InputReader.java)
+ at proguard.InputReader.execute(InputReader.java)
+ readInput(InputReader.java)
+ at proguard.InputReader.execute(InputReader.java)
+ readInput(InputReader.java)
+ at proguard.InputReader.execute(InputReader.java)
+ readInput(InputReader.java)
+ at proguard.ProGuard.readInput(ProGuard.java)
+ at proguard.ProGuard.execute(ProGuard.java)
+ optimize(ProGuard.java)
+ createPrintStream(ProGuard.java)
+ closePrintStream(ProGuard.java)
+ fileName(ProGuard.java)
+ at proguard.ProGuard.main(ProGuard.java)
+Caused by: java.io.IOException: No such file or directory
+ at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java)
+ readFiles(DirectoryPump.java)
+</pre>
+<p>
+
+For instance, ReTrace can't tell if the method <code>a</code> corresponds
+to <code>execute</code> or to <code>readInput</code>, so it lists both. You
+need to figure it out based on your knowledge of the application. Having line
+numbers and unambiguous names clearly is a lot easier, so you should consider
+<a href="../examples.html#stacktrace">preserving the line numbers</a> when you
+obfuscate your application.
+
+<hr />
+<address>
+Copyright &copy; 2002-2017
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.guardsquare.com/">GuardSquare</a>.
+</address>
+</body>
+</html>
+