如何在使用Lombok生成的IntelliJ IDEA中的setter方法中设置断点?

rmo*_*stl 10 java hibernate intellij-idea lombok

IntelliJ IDEA中是否有一种方法可以在由Lombok生成的setter方法中设置断点

这在某些调试方案中非常有用,例如,查看何时从像Hibernate这样的框架调用setter.

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

Фим*_*рин 11

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

这种方法的缺点是在直接访问/修改字段或使用getter/setter方法时都会获得线程暂停.

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

二传断点

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

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


Sim*_*mY4 6

以我的理解,您无法做到这一点,因为lombok正在以一种突变的代码没有自动生成的部分的行号的方式来突变您的字节码。

这样做是为了使您的源代码行始终与您的字节码匹配。如果它们不匹配,当您将断点放在一行上但执行没有停止或在其他地方停止时(由于行号不匹配),您可能会陷入困境。

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

  • 您可以使用 delombok 生成类似于 lombok 在底层使用的代码的 java 代码,并在生成的代码中设置断点。 (2认同)

Ole*_*nko 6

断点适用于隐式函数。delombok功能允许生成隐式实现(调试后您可以/应该恢复首次更改)。要进行隐式实现,只需右键单击类名并选择以下菜单行:

在此处输入图片说明


Reg*_*ton 6

我赢了:

  • 运行 -> 查看断点(或 Ctrl+Shift+F8)
  • 单击“+”(或 Alt+Ins)
  • 选择'1。Java 方法断点'
  • 要么痛苦地输入完全限定的类名,要么输入诸如“*.MyClass”之类的模式
  • 输入方法名称
  • 单击“确定”

我只花了6年时间:-)

在 Eclipse 上:右键单击类大纲或类型层次结构中的方法,然后选择“切换方法断点”。