Groovy/Grails代码的JDB调试

Cha*_*tin 5 java grails groovy remote-debugging jdb

我试图在我继承的一些(而不是bletcherous)Grails代码中调试一些问题.我是Groovy和Grails的亲戚,虽然是一个古老的Java家伙.

这是问题所在:我运行了jconsole和jdb钩子,但很难使用调试器,因为大部分代码都在闭包中.所以,例如,

def niftyMethod = {
    // do something nifty
    anObject.doSomethingThatBreaks()
}
Run Code Online (Sandbox Code Playgroud)

作为控制器上单个方法的实现.

作为一个闭包,名称(当调试器看到它​​时)是TheController.closure527(或类似的东西),并且特别难以找到.

那么,如何从块名称到闭包找到映射呢?

更一般地说,有没有关于做这种事情的好教程?

理想情况下,答案不会涉及转换到IntelliJ,好像上帝意味着我们使用IDE那样她不会给我们EMACS.

Ted*_*eid 3

这不是您想听到的,但调试是我使用 intellij 进行 grails 编程的唯一原因。如果很容易做到你所要求的,我会把它留给更好的编辑。弱的、非标准的按键绑定让我发疯,但有时调试是发现问题的最好方法。

我能想到的最好的事情是编译代码并打开 Class.closure123 然后通过 javap 和 grep 通过它们来识别正确的闭包。痛苦,但我不确定是否有更好的方法。

或者,您可以从代码中抛出异常,查看堆栈跟踪,然后从那里找到正确的基础类。

我知道,恶心。