IntelliJ IDEA中是否有办法在Lombok生成的 setter 方法中设置断点?
这在某些调试场景中非常有用,例如查看何时从 Hibernate 之类的框架调用 setter。
实际上,生成的 setter 方法会显示在 IntelliJ IDEA(使用中的 Lombok 插件)的结构视图中。但是我还没有找到通过上下文菜单等设置断点的方法。
IntelliJ IDEA中是否有办法在Lombok生成的 setter 方法中设置断点?
这在某些调试场景中非常有用,例如查看何时从 Hibernate 之类的框架调用 setter。
实际上,生成的 setter 方法会显示在 IntelliJ IDEA(使用中的 Lombok 插件)的结构视图中。但是我还没有找到通过上下文菜单等设置断点的方法。
作为一种解决方法,您可以使用Java Field Watchpoint。在这种情况下,该字段的每次访问/修改都将导致一个断点。
这种方法的缺点是当您直接访问/修改字段或使用 getter/setter 方法时都会导致线程暂停。
但是,当您使用 setter 方法捕获断点时,IDEA 还会在“变量”窗口中显示一个参数(与用于观察点的字段同名),并且断点不会显示在字段的行中,而是显示在类的行中.
以下简短描述,如何创建现场观察点,是从https://www.jetbrains.com/idea/help/creating-field-watchpoints.html复制的:
据我了解,您不能这样做,因为 lombok 正在以一种变异代码没有自动生成部分的行号的方式改变您的字节码。
这样做是为了让您的源代码行始终与您的字节码匹配。如果它们不匹配,当您将断点放在一行上但执行没有停止或在其他地方停止(因为行号不匹配)时,您可能会陷入这种情况。
但作为交换,Lombok 失去了调试生成代码的能力(你不能在没有行号的行上放置断点)。您必须依赖于生成的代码是正确的事实。
在结构视图中选择设置器并右键单击。弹出菜单包含一个菜单项“Toggle Method Breakpoint”(与您可以在类中的默认构造函数中设置断点的方式相同,而在其 java 代码中没有默认构造函数)
我赢了:
只花了我6年:-)
在 Eclipse 上:右键单击类大纲或类型层次结构中的方法,然后选择“切换方法断点”。