Tried it with the latest jdk 7 and jdk8 b124, no luck.
It works fine with groovy version that use invokedynamic, but regular version does not work. Stopped working several years ago when groovy changed the way they generate classes. However from what's in bytecode it is not obvious what's confusing the debugger, consider the code:

class T {
  private static void subfunction(Some some) {
        println "sub"
    }
}

*groovy *generates:
// access flags 0xA
  private static subfunction(Lxxx/Some;)V
   L0
INVOKESTATIC xxx/Some.$getCallSiteArray ()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
    ASTORE 1
   L1
    LINENUMBER 21 L1
    ALOAD 1
    LDC 3
    AALOAD
    LDC Lxxx/Some;.class
    LDC "sub"
INVOKEINTERFACE org/codehaus/groovy/runtime/callsite/CallSite.callStatic (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
    POP
   L2
    RETURN
    LOCALVARIABLE some Lxxx/Some; L0 L2 0
    MAXSTACK = 3
    MAXLOCALS = 2

*javac* generates: (I replaced println with System.out.printl)
// access flags 0xA
  private static subfunction(Lxxx/Some;)V
   L0
    LINENUMBER 21 L0
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    LDC "sub"
    INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
   L1
    LINENUMBER 22 L1
    RETURN
   L2
    LOCALVARIABLE some Lxxx/Some; L0 L2 0
    MAXSTACK = 2
    MAXLOCALS = 1

Egor

On 30.01.2014 15:53, Staffan Larsen wrote:
What version of Hotspot have you tried this with? There was a bug fix for 
invokedynamic and line numbers that may or may not be relevant in jdk8-b115: 
https://bugs.openjdk.java.net/browse/JDK-8026508

/Staffan

On 30 jan 2014, at 11:33, Egor Ushakov <[email protected]> wrote:

Hi guys!

there is a long standing issue (on groovy) 
https://jira.codehaus.org/browse/GROOVY-4063,
that does not allow to do correct step into: java debugger just skips the user 
code together with the code in stepping filters.
If breakpoint is set in user code it stops where expected.
Could someone please give a hint on how groovy should correctly generate the 
code not to confuse debugger step filters.

Thanks in advance,
Egor

Reply via email to