繁体   English   中英

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

[英]How to set a breakpoint in a setter method in IntelliJ IDEA that is generated with Lombok?

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

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

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

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

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

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

Setter 断点

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

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

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

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

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

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

在此处输入图片说明

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

我赢了:

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

只花了我 6 年 :-)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM