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