Java 可以调试运行时生成的groovy代码吗?

Java 可以调试运行时生成的groovy代码吗?,java,intellij-idea,groovy,jvm,remote-debugging,Java,Intellij Idea,Groovy,Jvm,Remote Debugging,我正在从事一个项目,我们需要在运行时编译groovy类,然后从这些类实例化对象并在其上执行方法。这些类的源仅在活动环境中作为字符串存在。 这些类可能包含相当复杂的代码,因此很有可能隐藏bug 我们的方法的问题是,当我们注意到这些类中的错误行为时,我们不能使用舒适的调试方法。 我们当然可以针对这些类编写和执行测试,但通常情况下,您只想一步一步地了解情况 所以我的问题是:有没有办法调试运行时生成的groovy/Java类? 我们目前采取的跟踪bug的步骤: 1) 编写测试以重现该行为 2) 通读代码

我正在从事一个项目,我们需要在运行时编译groovy类,然后从这些类实例化对象并在其上执行方法。这些类的源仅在活动环境中作为字符串存在。 这些类可能包含相当复杂的代码,因此很有可能隐藏bug

我们的方法的问题是,当我们注意到这些类中的错误行为时,我们不能使用舒适的调试方法。 我们当然可以针对这些类编写和执行测试,但通常情况下,您只想一步一步地了解情况

所以我的问题是:有没有办法调试运行时生成的groovy/Java类?

我们目前采取的跟踪bug的步骤:

1) 编写测试以重现该行为

2) 通读代码。(显然,在复杂的课程中,成功率极低)

3) 做仪器。我们调用在utils类中编写的静态“_break”方法(因此没有运行时生成的东西)。在这个方法中,我们可以添加一个断点。因此,这几乎就像我们直接调试运行时生成的类一样。这种方法的问题是,每次您想要添加/删除中断调用时,都必须重新编译groovy类并向testsystem添加新版本

如果您想知道我们如何为这些类编写测试,请看以下方法:

对于单元测试,我们将代码从字符串复制到常规groovy类中。这些用于开发和单元测试,因为它为我们提供了代码完成和一种快速方式,至少可以针对简单测试执行类。 我们可以在单元测试级别调试代码。这里的问题是,数据设置太复杂,无法在单元测试中重现某些组合

对于集成测试,我们执行整个编译、添加和执行过程,就像在实时系统中一样

我们使用Intellij 2017作为IDE,我目前不知道是否或者如何将字节码“连接”到从中生成的字符串,或者复制的groovy类,我们用于单元测试。 任何其他允许我们调试的工具也可以