Single stepping bytecodes inside eclipse

Ioi Lam ioi.lam at oracle.com
Wed Apr 4 18:07:05 UTC 2018


Hi,

I am trying to trace into the method handle linking code. I have a 
program like this:

     // HelloHM.java:8        mh.invokeExact("yo!");
     23:    aload_3;
     24:    ldc    #9; //    String "yo!";
     26:    invokevirtual    #10; //    Method 
java/lang/invoke/MethodHandle.invokeExact:"(Ljava/lang/String;)V";

I want to be able to set a break point at bytecode 26, do a single step, 
and then automatically land into the first bytecode of

java.lang.invoke.MethodHandleNatives.linkMethod

Well, I can't even figure out a way to display bytecodes inside eclipse, 
or single step a single bytecode.

Also, I tried setting a breakpoint at MethodHandleNatives.linkMethodbut 
eclipse simply ignores that. (I can set normal break points in my test 
program's Java source code view).

So am I out of luck? Do I need to fall back to println() or jdb?

jdb is slightly better -- it doesn't allow single stepping bytecodes, or 
break at a specific bytecode. I can do this


main[1] stop at HelloMH:8
main[1] cont
Breakpoint hit: "thread=main", HelloMH.main(), line=8 bci=23
8            mh.invokeExact("yo!");

main[1] step
 >
Step completed: "thread=main", 
jdk.internal.misc.SharedSecrets.setJavaLangInvokeAccess(), line=99 bci=1

main[1] where
   [1] jdk.internal.misc.SharedSecrets.setJavaLangInvokeAccess 
(SharedSecrets.java:99)
   [2] java.lang.invoke.MethodHandleImpl.<clinit> 
(MethodHandleImpl.java:1,778)
   [3] java.lang.invoke.Invokers.checkCustomized (Invokers.java:571)
   [4] java.lang.invoke.LambdaForm$MH.1359044626.invokeExact_MT (null)
   [5] HelloMH.main (HelloMH.java:8)

But jdb's idea of "step" completely ignores the MH linking code inside 
MethodHandleNatives.linkMethod. So I have to resort to manually setting 
a break point at MethodHandleNatives.linkMethod.


Thanks
- Ioi




More information about the mlvm-dev mailing list