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