是否可以调试运行时生成的groovy代码?

时间:2017-08-16 09:07:33

标签: java intellij-idea groovy jvm remote-debugging

我正在开发一个项目,我们需要在运行时编译groovy类,然后从这些类中实例化对象并在其上执行方法。这些类的源仅在实时环境中以字符串形式存在。 这些类可以包含非常复杂的代码,因此很有可能在其中隐藏错误。

我们的方法的问题是,当我们注意到这些类中的错误行为时,我们无法使用舒适的调试方法。 我们当然可以针对这些类编写和执行测试,但通常你只是想知道一步一步发生了什么。

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

我们目前采取的追踪错误的步骤:

1)编写测试以重现行为

2)仔细阅读代码。 (显然在复杂的课程中成功率极高)

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

如果您想知道我们如何为这些类编写测试,请按以下步骤操作:

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

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

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

0 个答案:

没有答案