5

我正在尝试调试我继承的一些(相当无礼的)Grails 代码中的一些问题。我是 Groovy 和 Grails 的相对菜鸟,虽然我是 Java 的老家伙。

这就是问题所在:我让这个东西在 jconsole 和 jdb 挂钩中运行,但是使用调试器很困难,因为很多代码都在闭包中。所以,例如,

def niftyMethod = {
    // do something nifty
    anObject.doSomethingThatBreaks()
}

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

作为一个闭包,名称(当调试器看到它​​时)是 TheController.closure527(或类似的名称),而且很难找到。

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

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

理想情况下,答案不会涉及转换到 IntelliJ,就好像上帝让我们使用这样的 IDE,她不会给我们 EMACS。

4

2 回答 2

3

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

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

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

我知道,恶心。

于 2010-09-11T18:27:54.773 回答
1

Use Intellij, set the Eclipse or Emacs Keymap (or make your own perfect keymap), and enjoy the 21st century :)

于 2010-09-12T01:25:17.277 回答