java - Groovy/Grails代码的JDB调试

标签 java grails groovy remote-debugging jdb

我正在尝试调试我继承的某些(相当令人讨厌的)Grails 代码中的一些问题。尽管我是 Java 的老手,但我在 Groovy 和 Grails 方面相对来说是个菜鸟。

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

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

作为 Controller 上单个方法的实现。

作为闭包,名称(在调试器看到它​​时)是 TheController.closure527(或类似名称),而且特别难找。

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

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

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

最佳答案

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

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

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

我知道,恶心。

关于java - Groovy/Grails代码的JDB调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3691388/

相关文章:

regex - Jenkins Groovy 控制台日志上的构建后插件多行正则表达式

java - 如何让 IntelliJ 识别 wicket html 标签?

grails - Grails withTransaction()和事务服务方法之间的区别

grails - Grails动态网址映射

grails - 在Grails和SpringSecurity中访问Oracle Internet Directory(OID)中的嵌套LDAP角色

Java SimpleHTTPServer 相当于 "python -m SimpleHTTPServer"

grails - 我如何将日期格式化为来自 <g :select> 中的数据库的指定格式

java - 文件对象中的默认存储位置是什么

java - Hibernate View 映射

未找到 javax.servlet 包