aboutsummaryrefslogtreecommitdiffstats
path: root/docs/pdguide/trace.xml
diff options
context:
space:
mode:
Diffstat (limited to 'docs/pdguide/trace.xml')
-rw-r--r--docs/pdguide/trace.xml186
1 files changed, 186 insertions, 0 deletions
diff --git a/docs/pdguide/trace.xml b/docs/pdguide/trace.xml
new file mode 100644
index 000000000..6ff915738
--- /dev/null
+++ b/docs/pdguide/trace.xml
@@ -0,0 +1,186 @@
+<chapter id="trace" xreflabel="Tracing">
+ <title>Tracing</title>
+
+ <sect1 id="trace-introduction">
+ <title>Introduction</title>
+
+ <para>
+ The AspectJ developers have instrumented the compiler/weaver with
+ many "trace" messages for their own debugging use. These remain in
+ the production releases because tracing helps when it is hard to
+ isolate the problem in a test case. This sections describes how
+ to enable tracing so you can provide trace information on bug reports.
+ </para>
+ <para>
+ The usual approach to opening a report on Bugzilla is to describe the symptoms of the
+ problem and attach a simple testcase. This allows the AspectJ team to try and reproduce the problem in
+ an attempt to fix it as well as improve the test suite. Unfortunately it may not be possible
+ to produce such a testcase either because your program is too large or is commercially sensitive. Alternatively
+ the problem may relate to your specific environment where AspectJ is being used and will not be
+ reproducible by the AspectJ team. In each of these situations you can produce a
+ trace of the compiler when the problem occurs instead. This can then be attached to the bug report. </para>
+
+ <sect2 id="trace-configuration" xreflabel="Configuring Tracing">
+ <title>Configuring Tracing</title>
+
+ <para> When available (Java 5 or later) AspectJ will use the
+ <ulink url="http://java.sun.com/j2se/1.5.0/docs/guide/logging/index.html">
+ java.util.logging</ulink> infrastructure
+ configured using a <literal>logging.properties</literal> file. By default only error
+ and fatal events will be logged but less severe warnings as well as fine-grained
+ method entry and exit events can be obtained using the appropriate configuration. All
+ regular compiler messages can also be logged through the infrastructure by setting the
+ <literal>org.aspectj.weaving.messages</literal> System property. </para>
+
+ <para> If you are running the AspectJ compiler/weaver under JDK 1.4 or earlier,
+ AspectJ will use a simple built-in trace
+ infrastructure that logs to stderr. This is enabled by setting the
+ <literal>org.aspectj.weaving.tracing.enabled</literal> System property. You may also override
+ the default behaviour or provide your own trace implementation using the
+ <literal>org.aspectj.weaving.tracing.factory</literal> System property. </para>
+
+ <para> The table below lists the System properties that can be used to configure tracing. </para>
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Property</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <literal>org.aspectj.tracing.debug</literal>
+ </entry>
+ <entry>
+ Enable simple debugging of the trace infrastructure itself.
+ <para> Default: <literal>false</literal>. </para>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <literal>org.aspectj.tracing.enabled</literal>
+ </entry>
+ <entry>
+ Enable the built-in AspectJ trace infrastructure.
+ <para> Default: <literal>false</literal>. </para>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <literal>org.aspectj.tracing.factory</literal>
+ </entry>
+ <entry>
+ Select trace infrastructure. Specify the fully qualified class name
+ of the <literal>org.aspectj.weaver.tools.TraceFactory</literal>
+ interface to use a custom infrastructure. Specify a value of
+ <literal>default</literal> to force AspectJ to use it's
+ built-in infrastructure.
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <literal>org.aspectj.tracing.messages</literal>
+ </entry>
+ <entry>
+ Enable tracing of compiler messages. The kind of messages logged
+ is determined by the selected trace infrastructure not the message
+ configuration.
+ <para> Default: <literal>false</literal>. </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect2>
+
+ <sect2 id="trace-examples" xreflabel="trace-examples">
+ <title>Examples</title>
+
+ <para> Using <literal>-Dorg.aspectj.tracing.factory=default</literal>
+ to force AspectJ to use its internal infrastructure,
+ <literal>-Dorg.aspectj.tracing.enabled=true</literal> to turn it on and
+ <literal>-Dorg.aspectj.tracing.messages=true</literal> to include messages
+ running a simple HelloWorld with LTW will generate tracing to stderr. Below
+ is an extract from that trace with method arguments removed.
+ You will notice the millisecond time stamp,
+ thread id and indication of entry/exit/event or message type for each line
+ of trace.
+ </para>
+ <programlisting><![CDATA[
+15:44:18.630 main > org.aspectj.weaver.loadtime.Aj.<init>
+15:44:18.660 main < org.aspectj.weaver.loadtime.Aj.<init>
+15:44:18.660 main > org.aspectj.weaver.loadtime.Aj.preProcess
+15:44:18.660 main - org.aspectj.weaver.loadtime.Aj.preProcess
+15:44:18.730 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.<init>
+15:44:18.730 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.<init>
+15:44:18.730 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize
+15:44:18.821 main I [AppClassLoader@92e78c] info AspectJ Weaver Version DEVELOPMENT ...
+15:44:18.821 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions
+15:44:18.821 main I [AppClassLoader@92e78c] info register classloader ...
+15:44:18.821 main - org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions
+15:44:18.841 main - org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions
+15:44:18.841 main I [AppClassLoader@92e78c] info using configuration ...
+15:44:18.891 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions
+15:44:19.021 main > org.aspectj.weaver.World$TypeMap.<init>
+15:44:19.021 main < org.aspectj.weaver.World$TypeMap.<init>
+15:44:19.021 main > org.aspectj.weaver.CrosscuttingMembersSet.<init>
+15:44:19.021 main < org.aspectj.weaver.CrosscuttingMembersSet.<init>
+15:44:19.021 main > org.aspectj.weaver.Lint.<init>
+15:44:19.021 main < org.aspectj.weaver.Lint.<init>
+15:44:19.021 main > org.aspectj.weaver.World.<init>
+15:44:19.111 main < org.aspectj.weaver.World.<init>
+15:44:19.201 main > org.aspectj.weaver.bcel.BcelWeaver.<init>
+15:44:19.201 main < org.aspectj.weaver.bcel.BcelWeaver.<init>
+15:44:19.201 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions
+15:44:19.211 main > org.aspectj.weaver.bcel.BcelWeaver.setReweavableMode
+15:44:19.351 main < org.aspectj.weaver.bcel.BcelWeaver.setReweavableMode
+15:44:19.351 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects
+15:44:19.351 main I [AppClassLoader@92e78c] info register aspect Aspect
+15:44:19.351 main > org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect
+15:44:19.501 main - org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass
+15:44:19.632 main > org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect
+15:44:19.792 main < org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect
+15:44:19.792 main < org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect
+15:44:19.792 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects
+15:44:19.792 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions
+15:44:19.792 main > org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave
+15:44:19.822 main < org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave
+15:44:19.822 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.weaveAndDefineConcete...
+15:44:19.822 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.weaveAndDefineConcete...
+15:44:19.822 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize
+15:44:19.822 main > org.aspectj.weaver.tools.WeavingAdaptor.weaveClass
+...
+]]></programlisting>
+
+ <para> Alternatively when running under Java 5 the <literal>logging.properties</literal>
+ file below could be used to configure Java Logging. The resulting
+ file, just containing trace for the
+ <literal>org.aspectj.weaver.loadtime</literal> package, will be
+ written to <literal>java0.log</literal> in your <literal>user.home</literal> directory.
+ </para>
+
+ <programlisting><![CDATA[
+handlers= java.util.logging.FileHandler
+
+.level= INFO
+
+java.util.logging.FileHandler.pattern = %h/java%u.log
+java.util.logging.FileHandler.count = 1
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+java.util.logging.FileHandler.level = FINER
+
+org.aspectj.weaver.loadtime.level = FINER
+]]></programlisting>
+
+ <para>
+ By setting the System property <literal>-Dorg.aspectj.tracing.debug=true</literal>
+ you should see a message confirming which trace infrastructure is being used.
+ </para>
+ <programlisting><![CDATA[
+TraceFactory.instance=org.aspectj.weaver.tools.Jdk14TraceFactory@12dacd1
+]]></programlisting>
+ </sect2>
+ </sect1>
+</chapter>