如何在Eclipse中的默认Java构造函数上设置断点?

在Eclipse中,我想在Java 默认构造函数上设置断点。 我不能简单地双击任何代码行的左边,因为默认构造函数没有源代码 – 它们是由Java编译器隐式生成的。

我希望能够在不修改现有代码的情况下设置这样的断点。

如果要在其中设置断点的代码位于构建路径而不是项目本身,那么如果打开Outline视图,您将看到默认构造函数存在于那里,您可以右键单击在它上面选择Toggle Method Breakpoint

请注意,有时默认构造函数将从“ 大纲”视图中过滤掉。 在这种情况下,可以通过更改filter设置来包含它。 这可以通过转到大纲视图菜单→ filter… →并取消选中合成成员来完成

这是在Eclipse Indigo中,我不知道这个function有多长。

如果确实需要它,请在类的其他方法之一中设置方法断点,选择断点(断点视图)并将其导出。 编辑此文件,以便断点指向标准构造函数。 至少必须改变以下属性(伽利略):

  • org.eclipse.jdt.debug.ui.JAVA_ELEMENT_HANDLE_ID
  • org.eclipse.jdt.debug.core.methodName – value="<init>"
  • org.eclipse.jdt.debug.core.methodSignature – value="()V"
  • 消息 – 不知道是否真的需要

可能更容易从其他类导出构造函数断点以查看正确的值。 现在导入更改的文件,你应该有你的构造函数断点。

这是一个黑客,但为我工作……

解决方案1:成员初始化程序

如果你有任何带有初始值设定项的成员变量,那么你可以在它们上面加一个断点。 例如:

 class MyClass { private int i = 0; // this line can have a breakpoint in Eclipse } 

解决方案2:类加载断点

如果你只使用一次这个断点,那么你可以使用类加载断点 :

您可以设置一个类加载断点,它将在类被丢弃时停止[原文如此]。 在Package Explorer,Project Explorer或Types视图中右键单击一个类,然后选择“Toggle class load breakpoint”

顾名思义,这个断点将在首次加载类时被点击,因此它只会触发一次(假设你只有一个类加载器)。 但根据您的需求,它可能已经足够了。

我想对rsp给出的答案做一点改进,使其更容易一些,但我还不能发表评论。

如果您创建默认构造函数(例如,通过按ctrl + alt + s然后按c),将breakPoint放在对此构造函数的调用中,然后按ctrl + z撤消创建默认构造函数,您仍将拥有断点没有更改代码。

希望能帮助到你

您始终可以创建自己的无参数构造函数并将断点放在那里。 但更重要的是,为什么要在那里设置断点? 它将简单地链接到无参数super() 。 如果它有您关心的代码,请将断点放在该构造函数中。

你可以做以下事情:

 public class MyClass { public MyClass() { super(); } } 

然后把断点放在那上面。 但是,你希望通过这个来完成什么?

如何创建一个公共无参构造函数并在其上设置断点? 如果这无济于事,你能详细说明原因吗?

您最好的选择可能是使用基于方面的框架来注入类中所需的function。

我认为Eclipse提供了一个默认的构造函数断点,但是只是在大纲中加载了类的断点。

你需要解决什么问题?

您可以考虑使用YouDebug框架来编写调试会话脚本,包括任何类的任何特定方法的断点。

断点是在目标JVM中发生特定事件时调用的事件回调处理程序。 您可以通过调用’vm’对象上的断点方法来创建断点。 这些方法采用在事件发生时调用的闭包,并且它们通常采用其他参数来控制断点的性质。

以下代码在org.acme.SubStringTest.java第7行定义断点(或者在此类中定义的任何源文件:)

 vm.breakpoint("org.acme.SubStringTest",7) { println "I'm at SubStringTest.java line 7"; }