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

时间:2009-12-09 19:59:04

标签: java eclipse breakpoints

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

我希望能够设置这样一个断点,而无需修改现有代码

9 个答案:

答案 0 :(得分:16)

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

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

这是在Eclipse Indigo中,我不知道这个功能有多长时间了。

答案 1 :(得分:8)

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

  • 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"
  • 消息 - 不知道是否真的需要

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

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

答案 2 :(得分:5)

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

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

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

解决方案2:类加载断点

如果你只使用一次这个断点,那么你可以使用class load breakpoint

  

您可以设置类加载断点,   这课将在课时停止   被遗弃[原文如此]。右键单击一个类   在Package Explorer中,Project   资源管理器或类型视图并选择   “切换类加载断点”

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

答案 3 :(得分:5)

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

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

希望有所帮助

答案 4 :(得分:1)

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

答案 5 :(得分:1)

您可以执行以下操作:

public class MyClass {

    public MyClass() {
       super();
    }

}

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

答案 6 :(得分:1)

如何创建公共无参数构造函数并在其上设置断点?如果这没有帮助,你能详细说明原因吗?

答案 7 :(得分:0)

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

  

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

     

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

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

答案 8 :(得分:0)

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

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

您需要解决什么问题?