21

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

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

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

4

5 回答 5

19

作为一种解决方法,您可以使用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. 此外,您可以设置其他选项,例如字段访问(用于获取器)或字段修改(用于设置器)
于 2016-01-23T13:17:01.810 回答
9

据我了解,您不能这样做,因为 lombok 正在以一种变异代码没有自动生成部分的行号的方式改变您的字节码。

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

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

于 2014-07-15T08:11:25.593 回答
6

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

在此处输入图像描述

于 2017-12-28T09:44:06.147 回答
0

在结构视图中选择设置器并右键单击。弹出菜单包含一个菜单项“Toggle Method Breakpoint”(与您可以在类中的默认构造函数中设置断点的方式相同,而在其 java 代码中没有默认构造函数)

于 2014-07-15T07:30:46.547 回答
0

我赢了:

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

只花了我6年:-)

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

于 2020-11-16T15:55:33.980 回答