RE: Re: Re: ASM-based class transformation affect class loading?

"Tim Eck" <[email protected]>
Newsgroups gmane.comp.java.objectweb.asm
Message-ID <01f701cb34e9$6c1b1690$445143b0$@com>
I don't know well enough to know if something about tree API or your code
is loading classes. I'd still pick a class that is getting missed and
trace the loading of it with a debugger. You might find a surprise in
there :-)

 

From: Sai Zhang [mailto:[email protected]] 
Sent: Tuesday, August 03, 2010 8:10 PM
To: Eugene Kuleshov
Cc: asm
Subject: [asm] Re: Re: ASM-based class transformation affect class
loading?

 

Thanks all for your insightful comments.

 

My code skeleton is:

 

                      ClassNode cn = new ClassNode();

                                  cr.accept(cn, ClassReader.SKIP_FRAMES);

                                  transformClassNode(cn);  //transform it
using tree API

                                  ClassWriter cw = new
ClassWriter(ClassWriter.COMPUTE_MAXS);

                                  cn.accept(cw);

 

Seems that I did not use COMPUTE_FRAMES . Is the above method usage
problematic?

 

 

As Tim mentioned, if the transformation (inside the transformClassNode(cn)
method in the

above case) happens to use another class definition. Thus, the classloader
will load that "silently"

and the transformer wont catch that, right? But I do not think the
transformation in the transformClassNode(cn) method uses or depends on
other "unloaded" classes (even does

not depends on any client classes). It only uses an extra "Tracer" class
for profiling.

 

So it becomes a bit weird for me.

 

thanks

 

-Sai

 

On Wed, Aug 4, 2010 at 1:24 AM, Eugene Kuleshov <[email protected]>
wrote:

 Have you specified COMPUTE_FRAMES flag in the ClassWriter's accept()
method? If so, remove it, or overwrite its getCommonSuperClass(..)
method that won't load classes.

 regards,
 Eugene



On Tue, Aug 3, 2010 at 11:48 AM, Sai Zhang <[email protected]>
wrote:
> Hi all:
>
> I met a strange problem when using ASM to transform my client code at
load
> time (excluding all JDK code already).
>
> It seems that my transformer is highly likely to affect the class
loading
> process. Please refer to the simple code below
> for illustration:
>
> Here is my simple ClassFileTransformer for load time class
transformation,
> all transformation operations are
> in the treeAPITransform(byte[]) method. It is actually a fairly simple
> intra-method transformation based on the "tree api"
> of ASM (just adding tracing method at the begin/end of each method call)
>
>
> @Override
>     public byte[] transform(ClassLoader loader, String className,
Class<?>
> clazz, ProtectionDomain domain,   byte[] bytes) {
>          //code omitted here, for excluding all JDK classes
>
>            /*I print each loaded class for debugging */
> (1)   System.err.println("---- load class: " + className);
>
>         try {
> (2)          return this.treeAPITransform(bytes);   //my simple
> transformation implementation
>         } catch (Exception e) {
>             e.printStackTrace();
>             return null;
>         }
>     }
>
> The weird thing is that statement (1) does not print out some obviously
> loaded classes (which has definitely been initialized and executed).
> If I remove statement (2), or change that to "return null", every thing
OK.
> all classes loaded are printed out at statement (1).
> I feel very confused on this point. I am wondering will ASM-based
> intra-method transformation affect the class loading? or
> did I instrument some extra classes by accident? or I should not use the
> tree api? or there is any tricks on this point?
> P.S. I use the ClassCheckerAdapter in ASM to check the validity of
> transformed bytecode after transformation. and no error messages
> are issued.
> thanks. Any comments are highly appreciated!!!
> -Sai
>

> --
> You receive this message as a subscriber of the [email protected] mailing
list.
> To unsubscribe: mailto:[email protected]
> For general help: mailto:[email protected]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>


--
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
message-footer.txt (text/plain, 238 B)
-- 
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.