【问题标题】:Put a breakpoint on every line in Eclipse?在 Eclipse 的每一行都设置断点?
【发布时间】:2014-07-03 16:19:54
【问题描述】:

有没有办法在 Eclipse 的每一行都设置断点?

我问的原因是因为我正在分析一个用 Java 编写的代理程序,它等待并侦听连接。我正在尝试了解它是如何工作的,但我无法弄清楚当连接到达时代码从哪里开始。

无论代码从哪里开始,如何触发断点,也就是每行都设置断点?

【问题讨论】:

  • 类加载断点在这里会是一件好事吗?请参阅运行 -> 添加类加载断点...

标签: java eclipse debugging breakpoints


【解决方案1】:

来自 StackOverFlow 站点参考

我不认为你可以选择一个类进行调试但你可以去eclipse中的Outline view,选择类中的所有方法,右键选择Toggle Method Breakpoint

How to set a breakpoint on a Class NOT a Line in Eclipse?

【讨论】:

    【解决方案2】:

    不可能在每一行都设置断点...将断点放在代码中您想要的位置,或者手动执行.. 然后调试您的应用程序;它将停在断点线上;

    【讨论】:

      【解决方案3】:

      恕我直言,在每一行中设置一个断点是多余的,所以我会在我知道已通过的行上放置一个断点,然后向上调用堆栈以获取入口点,即使用线程所在的“调试”视图并列出当前堆栈。

      找到入口点后,您可以在此处设置断点,然后使用正常的调试器命令(如“step into”、“step over”等)单步执行代码。

      顺便说一句,AFAIK 在 Eclipse 中甚至不可能在每一行中设置断点,因为它没有多大意义。可能有一种方法可以为代码中的每一行创建一个 .bkpt 文件并导入这些文件,但我既不知道您将如何创建这样的文件,也不认为 Eclipse 能够处理如此巨大的潜力断点数量。

      【讨论】:

        【解决方案4】:

        我想不出你想要在每一行都设置断点的原因。这相当于简单地在main() 的第一行放置一个断点,然后使用step into 单步执行您的程序——这不是理智的人通常想要对大型程序执行的操作。

        我建议:

        1. 删除或禁用您已有的任何断点
        2. 在调试模式下启动您的代理;允许它初始化。它现在正在收听。
        3. 点击调试控件中的“暂停”按钮。您可能必须选择正确的线程来暂停 - 实验。
        4. 查看堆栈显示,这将显示它暂停的位置。它可能会在库类中暂停 - 按照堆栈跟踪您自己的代码。

        如果您愿意,您现在可以使用客户端连接到您的代理,并使用调试步骤控件来观察代码如何处理它。这样做的一个问题是,当您查看步骤时,事情会超时,因此在可能的情况下设置更长的超时时间会很有用。

        【讨论】:

        • 正如我所解释的,这是因为我看不到某些动作的触发器在哪里。例如,我使用 main 运行程序,然后它会休眠直到发生某些事情。我想从它被触发的那一刻就开始关注它
        • 你明白我所说的“跟随堆栈”是什么意思吗?如有必要,我可以添加更多细节。
        • 执行问题的示例用法是您在不熟悉的代码库中,并且您想检查特定类中的任何代码是否运行。例如,您可能正在尝试检查 Java FX 应用程序类在何处/是否执行
        • @Dylanthepiguy 要做到这一点,你不会想“在每一行都放一个断点”。
        • 问题是要求类似 Chrome 的 JavaScript 的“下一个中断”。我在到达我的 REST 端点之前抛出了一个异常,并且无法知道 ContainerRequestFilter、ExceptionMapper 和 JaxRS 在我的 JSON 到达我的班级之前都在触摸它。
        【解决方案5】:

        “击中”两个黑点之间的黄色箭头,假设我们的程序在调用方法的行上有断点,并已停在那里。按此按钮,调试器将进入方法内部并停在同一行的第一行,因此我们可以在方法内部进行调试。例如下图所在的断点。

        按下标记为红色的按钮,调试器将进入 echaCuentas ( ) 方法并在该方法的第一行停止。 下一个按钮,一个跳过黑点的黄色箭头,执行一步程序,但没有进入您找到的方法。例如,在上图中,如果按下此按钮,执行将通过 System.out.println() 行,而不会在 echaCuentas() 方法内停止。

        最后,最后一个按钮是两个黑点之间的箭头,前进程序,直到我们退出当前方法并转到它被调用的地方。

        【讨论】:

        • 我猜 OP 知道,问题似乎是从哪里开始,即在哪里放置第一个断点。
        • 在文件的第一行(即在包中)
        • AFAIK 你不能在包声明上设置断点,而且它并不总是使用的类的第一行或方法。如果您不知道该程序是如何工作的,您不能只在任意行设置断点并希望程序直接跳入其中(并且 OP 不知道这一点,他试图通过调试来学习,因此问题)。
        • 请仔细阅读这个问题,OP知道如何调试,他只是不知道从哪里开始。这实际上是一个很好的问题,有时使用大型(Web)应用程序,其中不仅仅是一个单一的主要方法作为根。
        【解决方案6】:

        我不知道你是否可以一次为每一行添加一个断点。 但是,您可以通过单击“Debug as”然后使用以下命令逐行调试:[F6]“Step Over”和[F5]“Step Into”。

        【讨论】:

        • 这绝对是要走的路,但问题仍然是从哪里开始。至少这是我从 OP 的问题中读到的。
        猜你喜欢
        • 1970-01-01
        • 2017-02-26
        • 2010-10-14
        • 2015-12-28
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 2010-10-08
        • 2012-04-06
        相关资源
        最近更新 更多