如何在使用龙目岛生成的IntelliJ IDEA中的设置器方法中设置断点?
2022-09-02 01:02:56
在IntelliJ IDEA中,有没有办法在龙目岛生成的 setter 方法中设置断点?
这在某些调试场景中非常有用,例如,查看何时从Hibernate等框架调用setter。
实际上,生成的 setter 方法显示在 IntelliJ IDEA(正在使用的龙目岛插件)的结构视图中。但是我还没有找到通过上下文菜单等设置断点的方法。
在IntelliJ IDEA中,有没有办法在龙目岛生成的 setter 方法中设置断点?
这在某些调试场景中非常有用,例如,查看何时从Hibernate等框架调用setter。
实际上,生成的 setter 方法显示在 IntelliJ IDEA(正在使用的龙目岛插件)的结构视图中。但是我还没有找到通过上下文菜单等设置断点的方法。
作为一种解决方法,您可以使用Java Field Watchpoint。在这种情况下,每次访问/修改字段都将导致断点。
此方法的缺点是,当您直接访问/修改字段或使用 getter/setter 方法时,都会获得线程挂起。
但是,当您使用 setter 方法捕获断点时,IDEA 还会在“变量”窗口中显示一个参数(与用于监视点的字段同名),并且断点不会显示在字段的行中,而是显示在类的行中。
以下简短说明“如何创建现场监视点”是从 https://www.jetbrains.com/idea/help/creating-field-watchpoints.html 复制的:
在我的理解中,你不能这样做,因为龙目岛正在以一种突变代码的方式改变你的字节码,而突变的代码没有自动生成部件的行号。
这样做是故意的,以便始终使源代码行与字节码匹配。它们不匹配,当您将断点放在一行上但执行没有停止或停止在其他地方(因为行号不匹配)时,您可能会陷入这种情况。
但作为交换,龙目岛失去了调试生成的代码的能力(你不能在没有行号的行上放置断点)。您必须依赖于生成的代码是正确的事实。