Re: Adding try/finally block

Nikolas Nehmer <[email protected]>
Newsgroups gmane.comp.java.objectweb.asm
Organization FB Informatik, TU Kaiserslautern, GERMANY
Message-ID <15868406.1272705130923.OPEN-XCHANGE.WebMail.tomcat@groupmail.informatik.uni-kl.de>
Hi,

seems to be a known issue. Found the answer in this archive entry:
http://mail-archive.ow2.org/asm/2008-02/msg00037.html
Adding an artificial try block start label fixes the NPE.

Cheers Nikolas

Am Fr 30.04.2010 16:30 schrieb Nikolas Nehmer
<[email protected]>:

>Hi,
>
>I'm trying to add a try/finally block to every method in my system.
>Unfortunately I have to do so, to ensure a counter to set/reset
>properly
>in every case - i.e. normal execution of a method, exception raised in
>a
>specific method (i.e. athrow executed in the same method) and methods
>terminated by exception propagation.
>
>Conceptually I'm trying to do the following:
>methodStartLabel
>...
><<<counter increment injected manually before every return statement
>methodReturnStatement
><<<inject code here
><<<newTryBlockEndLabel
><<<counterIncrement
><<<athrowStatement
>methodEndLabel
>
>
>the TryCatckBlockNode is created with the following parameters:
>methodStartLabel, newTryBlockEndLabel, newTryBlockEndlabel, null
>
>For most cases I just don't use the visitor pattern, but inject the new
>statements into the instruction list directly. Accordingly, I add the
>TryCatchBlockNode just created into the tryCatchBlocks list. While
>executing the instrumented application the following
>NullPointerException is raised :( Any ideas or suggestions? I know
>there
>is an example in one of the ASM papers related to my usecase.
>Unfortunalty this doesn't help me a lot.
>
>java.lang.NullPointerException
>   at org.objectweb.asm.MethodWriter.visitMaxs(Unknown Source)
>   at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
>   at

>>de.kl.uni.cs.nehmer.setup.bci.SimpleBCIMethodAdapter.visitEnd(SimpleBCIMethodAdapter.java:51)
>   at org.objectweb.asm.ClassReader.accept(Unknown Source)
>   at org.objectweb.asm.ClassReader.accept(Unknown Source)
>   at
>de.kl.uni.cs.nehmer.setup.bci.BCIAgent.transform(BCIAgent.java:32)
>   at

>>sun.instrument.TransformerManager.transform(TransformerManager.java:169)
>   at

>>sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
>   at java.lang.ClassLoader.defineClass1(Native Method)
>   at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
>   at
>java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
>   at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
>   at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>   at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>   at java.security.AccessController.doPrivileged(Native Method)
>   at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>   at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
>   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>   at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
>   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
>
>cheers Nikolas
>
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.