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

Gre*_*tes 21 java eclipse breakpoints

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

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

use*_*063 16

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

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

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

  • 这比更热烈的答案更好! (2认同)
  • 仅当类来自外部 jar 文件时,此默认构造函数才会出现在大纲视图中。但是我工作区中 Java 源文件的大纲视图不包含默认构造函数 (Eclipse Indigo SR2)。这至少是我发现的差异。 (2认同)

use*_*421 9

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

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

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

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


Mat*_*nit 5

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

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

class MyClass {
  private int i = 0; // this line can have a breakpoint in Eclipse
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:类加载断点

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

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

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


lop*_*vit 5

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

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

希望能帮助到你

  • 好吧,它可能已经有5年了,但是Eclipse开发人员还没有解决这个问题.我需要和op一样,来到这里寻找解决方案.在尝试给出答案后,我会发现自己对另一个用户的答案有所改进,并在此处发布,以帮助处于相同情况的其他人.此外,我确实记住op不想更改源代码,我的解决方案不会这样做:它只是创建一个临时默认构造函数,仅用于放置断点然后撤消它.在任何时候你都修改任何东西,因为你没有将它保存到磁盘. (2认同)

Han*_*Gay 0

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