<chapter id="ltwdump" xreflabel="Dumping classes during load-time weaving"> <title>Dumping classes during load-time weaving</title> <sect1 id="ltwdump-introduction"> <title>Introduction</title> <para> Very rarely problems may be encountered with classes that have been load-time woven. Symptoms will include incorrect program function or a Java exception such as <literal>java.lang.VerifyError</literal>. In these situations it's most helpful to include the offending class in the bug report. When using load-time weaving the woven classes are in memory only so to save them to disk configure <literal>META-INF/aop.xml</literal> to dump the classes (by default to an <literal>_ajdump</literal> subdirectory of the current working directory). Also if the input class file is not available (e.g. it is a generated proxy or has already been instrumented by another agent) you can configure the weaver to dump the input classes as well. </para> <sect2 id="ltw-examples" xreflabel="ltwdump-configuration"> <title>Configuring bytecode dumping in load-time weaving</title> <para> For details of how to configure byte-code dumping, see the AspectJ Development Environment Guide section on <ulink url="../devguide/ltw-configuration.html#configuring-load-time-weaving-with-aopxml-files"> Configuring Load-time Weaving</ulink>. Following is a simple example. </para> </sect2> <sect2 id="ltwdump-examples" xreflabel="LTW Dump Examples"> <title>LTW Dump Examples</title> <para> The following <literal>META-INF/aop.xml</literal> will weave classes in the <literal>com.foo</literal> package (and subpackages) but not CGLIB generated classes in the <literal>com.foo.bar</literal> package (and subpackages). It will also ensure all woven byte-code is dumped both before and after weaving. </para> <programlisting><![CDATA[ <aspectj> <aspects> <aspect name="ataspectj.EmptyAspect"/> </aspects> <weaver options="-verbose -debug"> <dump within="com.foo.bar..*" beforeandafter="true"/> <include within="com.foo..*"/> <exclude within="com.foo.bar..*CGLIB*"/> </weaver> </aspectj> ]]></programlisting> <para> You should see messages similar to this: </para> <programlisting><![CDATA[ [WeavingURLClassLoader] info AspectJ Weaver Version 1.5.3 built on Thursday Oct 26, 2006 at 17:22:31 GMT [WeavingURLClassLoader] info register classloader org.aspectj.weaver.loadtime.WeavingURLClassLoader [WeavingURLClassLoader] info using configuration /C:/tempMETA-INF/aop.xml [WeavingURLClassLoader] info register aspect ataspectj.EmptyAspect [WeavingURLClassLoader] debug not weaving 'com.foo.bar.Test$$EnhancerByCGLIB$$12345' [WeavingURLClassLoader] debug weaving 'com.foo.bar.Test' ]]></programlisting> <para> On disk you would find the following files: </para> <programlisting><![CDATA[ _ajdump/_before/com/foo/bar/Test.class _ajdump/com/foo/bar/Test.class ]]></programlisting> </sect2> </sect1> </chapter>