Hi

[...]
Some code i don't like to read
[...]
> and I try to execute Target, I get a message 
> 
>    Exception in thread "main" java.lang.VerifyError: (class: 
> com/cisco/nm/tools/transposer/Target, method: m1 signature: 
> ()V) Illegal use of nonvirtual function call

[...] 
>      11 astore_0
>      12 aload_0
>      13 invokespecial #49 <Method void printStackTrace()>
>      16 getstatic #2 <Field java.io.PrintStream out>
>      19 ldc #6 <String "def">
>      21 invokevirtual #4 <Method void println(java.lang.String)>
>      24 getstatic #2 <Field java.io.PrintStream out>
>      27 ldc #7 <String "abc">
>      29 invokevirtual #4 <Method void println(java.lang.String)>
>      32 return
>    Exception table:
>       from   to  target type
>         0     8    11   <Class java.lang.Exception>
> 
>    Method void main(java.lang.String[])
>       0 invokestatic #8 <Method void m1()>
>       3 return
> 
> I'm clearly missing something -- but what is it?
You can't use invokespecial for printStackTrace,
it's only legit for static final or private methods.
btw it's no good idea to use local 0 to store the exception better use
dup

insert before the first instruction of any exception handler
DUP
INVOKEVIRTUAL Throwable.printStackTrace
and everything should be fine
if you need to avoid double stack traces you are in trouble.
I'm not sure if it's even possible.





--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to