如何在使用龙目岛生成的IntelliJ IDEA中的设置器方法中设置断点?

2022-09-02 01:02:56

IntelliJ IDEA中,有没有办法在龙目岛生成的 setter 方法中设置断点

这在某些调试场景中非常有用,例如,查看何时从Hibernate等框架调用setter。

实际上,生成的 setter 方法显示在 IntelliJ IDEA(正在使用的龙目岛插件)的结构视图中。但是我还没有找到通过上下文菜单等设置断点的方法。


答案 1

作为一种解决方法,您可以使用Java Field Watchpoint。在这种情况下,每次访问/修改字段都将导致断点。

此方法的缺点是,当您直接访问/修改字段或使用 getter/setter 方法时,都会获得线程挂起。

但是,当您使用 setter 方法捕获断点时,IDEA 还会在“变量”窗口中显示一个参数(与用于监视点的字段同名),并且断点不会显示在字段的行中,而是显示在类的行中。

Setter Break point

以下简短说明“如何创建现场监视点”是从 https://www.jetbrains.com/idea/help/creating-field-watchpoints.html 复制的:

  1. 在主菜单上,选择“运行|查看断点,或按 Ctrl+Shift+F8。
  2. 在打开的“断点”对话框中,单击“添加”(加号图标)按钮。
  3. 从下拉列表中选择“字段观察点”:“Java 字段观察点”
  4. 在打开的“添加字段观察点”对话框中,指定以下内容:
    包含所需字段的类的完全限定名。您可以手动键入它,或单击浏览按钮,然后按名称或从项目中查找所需的类。
    字段名称。您可以手动键入它,也可以单击浏览按钮,然后从所选类中的字段列表中选择所需的字段。
  5. 此外,您还可以设置其他选项,例如字段访问(对于获取器)或字段修改(对于设置者)

答案 2

在我的理解中,你不能这样做,因为龙目岛正在以一种突变代码的方式改变你的字节码,而突变的代码没有自动生成部件的行号。

这样做是故意的,以便始终使源代码行与字节码匹配。它们不匹配,当您将断点放在一行上但执行没有停止或停止在其他地方(因为行号不匹配)时,您可能会陷入这种情况。

但作为交换,龙目岛失去了调试生成的代码的能力(你不能在没有行号的行上放置断点)。您必须依赖于生成的代码是正确的事实。


推荐