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

时间:2014-07-15 07:04:56

标签: java hibernate intellij-idea lombok

IntelliJ IDEA 是否有办法在 Lombok 生成的setter方法中设置断点

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

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

5 个答案:

答案 0 :(得分:10)

作为一种解决方法,您可以使用 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. 从下拉列表中选择Field Watchpoint:" Java Field Watchpoints"
  4. 在打开的“添加字段观察点”对话框中,指定以下内容:
    包含所需字段的类的完全限定名称。您可以手动键入,或单击“浏览”按钮,然后按名称或项目查找所需的类 字段名称。您可以手动键入,或单击“浏览”按钮,然后从所选类的字段列表中选择所需的字段。
  5. 此外,您可以设置其他选项,如字段访问(针对getter)或字段修改(针对setter)

答案 1 :(得分:4)

根据我的理解,你不能这样做,因为lombok正在改变你的字节码,使得变异代码没有自动生成部分的行号。

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

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

答案 2 :(得分:2)

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

enter image description here

答案 3 :(得分:0)

在结构视图中选择setter并单击鼠标右键。弹出菜单包含一个菜单项" Toggle Method Breakpoint" (与在类中没有默认构造函数的类中的默认构造函数中设置断点的方法相同)

答案 4 :(得分:0)

我赢了:

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

只花了我6年时间:-)

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