【问题标题】:Inspect current exception in Eclipse debugger?检查 Eclipse 调试器中的当前异常?
【发布时间】:2012-02-09 20:02:58
【问题描述】:

如果 Java 应用程序抛出未处理的异常,它会导致 Eclipse 在该点中断。有没有办法检查当前的异常?基本上,$exception 来自 MSVS?

【问题讨论】:

  • Eclipse 崩溃了?看看 eclipse 日志文件看看是什么原因造成的怎么样?
  • @smox 好吧,如果您使用过 MSVS 的 $exception,您就会明白我的意思。这允许您在 Expressions 视图中键入以查看当前异常并以交互方式查看它的各个字段。
  • 好的,我把原来的问题读错了:) ...你不能在 StackTrace 中按更高然后查看异常上的变量吗?

标签: java eclipse debugging


【解决方案1】:

认为使用异常断点时会出现所描述的问题,在这种情况下,您无法访问异常变量并且无法在变量视图中检查它。

我在以下帖子中找到了这个问题的“解决方案”:Breakpoint at exception in Eclipse - how to examine Exception object?

它是:

Eclipse 首选项中有一个选项允许检查 抛出的异常:

检查 Java -> 调试 -> 异常挂起时打开弹出窗口

使用此选项将弹出一个允许检查 例外。

奇怪的是这个选项默认没有选中,因为它非常 有用!

【讨论】:

  • 这很好,但我有一个后续问题是,如果您切换应用程序,如何取回它?我切换到 SO 对答案进行投票,当我回到 Eclipse 时,弹出窗口已经关闭。 MSVS FTW。
  • 坦率地说,我已经尝试回答这个问题超过 5 年了。我经常感到震惊的是,您可以在异常情况下停止,但被拒绝提供有关停止您的异常的更多详细信息。
  • @dcstraw 我刚刚搜索了同样的东西,这让我很头疼。弹出窗口的解决方案实际上非常棒!我注意到您可以返回带有异常详细信息的弹出窗口,即使在切换应用程序之后也是如此。为此,只需在“调试”视图中单击有异常的进程行(即Thread [<1> main] (Suspended (exception ClassCastException))
  • 这曾经可以工作,但在开普勒似乎不再工作了:/
  • @kizzx2 它已被修复(据报道):bugs.eclipse.org/bugs/show_bug.cgi?id=404784#c3
【解决方案2】:

我通常去'变量'视图并寻找保存异常的变量(通常是e),但我认为这取决于发生异常的特定上下文,这不是像你这样的Eclipse信息要求。

【讨论】:

    【解决方案3】:

    在 Eclipse 的调试透视图中找到“Breakpoints”视图。现在找到带有小“J”和“!”的工具栏图标,它的工具提示应该是“添加 Java 异常断点”。当您单击此工具栏图标时,将打开一个窗口,您可以在其中输入异常名称并找到所需的名称。确保选中“暂停未捕获的异常”。您可能还想取消选中“暂停捕获的异常”,或者您可能会经常暂停/中断代码中已经适当处理的异常。然后点击“确定”。

    您现在将在断点列表中看到您的异常类型,并且您可以在调试模式下运行您的 Java 应用程序。 Eclipse 将暂停/中断未捕获的异常,然后您可以调试并查看变量等。 (记住你可以点击调用栈查看其他变量和方法)

    在断点列表中,您可以取消选中您的异常类型以不再暂停/中断该特定异常。这很方便,因此您不必一直删除/添加典型的异常类型。您可以想象我将 NullPointerException、IllegalArgumentException、ArrayIndexOutOfBoundsException 等都添加到我的列表中,并根据需要打开/关闭它们。

    【讨论】:

    • 问题是如何检查异常(它已经在异常中中断)。
    【解决方案4】:

    如果要检查 Exception 对象,请在 catch 块内设置断点,或设置 Exception 断点,然后在断点处将鼠标悬停在变量上。

    try {
        ...code...
    } catch (Exception e) {
        ...
    }
    

    将鼠标悬停在 e 上,或打开 Eclipse 变量视图并添加异常变量的名称。

    希望这会有所帮助!

    【讨论】:

    • 好吧,感谢您指出显而易见的:/但看起来答案是“不,你不能”然后:(
    • 这是怎么回事?从悬停或变量视图中,您可以深入了解异常的任何字段……与$exception 有什么不同?
    • @BRPocock $exception 不需要在热调试会话中重新编译或停止应用程序
    • 这也不需要重新编译……当然,除了异常会停止该线程这一事实之外?
    • @BRPocock 好吧,我想我一开始并不清楚。假设我只有上面的 ...code... 部分(没有 try-catch 块)。 ...code... 抛出,我想在那里检查异常。我需要停止执行,转到编辑器并添加 try-catch 块。 $exception 不是这种情况
    猜你喜欢
    • 2013-01-17
    • 2011-03-28
    • 2012-04-28
    • 1970-01-01
    • 2011-10-26
    • 2014-09-26
    • 2011-11-12
    • 2014-04-10
    • 2021-02-25
    相关资源
    最近更新 更多