在Eclipse中异常断点——如何检查异常对象?

20

我感觉我错过了非常简单的东西。我已经设置Eclipse在所有异常发生时中断。例如,它在一个AssertionFailedException上中断。调试窗口将显示线程已暂停,并具有以下数据:

Thread [Thread-1] (Suspended (exception AssertionFailedException)) 
    ContactManager.addContact(String) line: 93  
    ContactManager$ContactDataCallback.dispatch(String, Element, ClientConnector) line: 118 
    PacketHandler.handle(FractusPacket) line: 173   
    ServerConnection.syncProcess(FractusMessage) line: 122  
    ServerConnection.run() line: 248    
    Thread.run() line: 636

然而,我要查找的文本,例如:"Getter called outside realm of observable org.eclipse.core.databinding.observable.set.WritableSet@4b7361e2",直到我逐步执行异常(从而将其传播到整个堆栈)才可用,在那里它输出异常的类型、文本(即我想要的部分)和堆栈跟踪。

如何检查“AssertationFailedException”(或任何其他异常),以便获取构造异常时使用的消息?当然,我处于Debug视角。

4个回答

32

在Eclipse偏好设置中有一个选项,允许检查抛出的异常:

检查 Java -> Debug -> Open popup when suspended on exception

启用此选项后,将弹出一个窗口,以便检查异常。

很奇怪为什么这个选项默认情况下没有被勾选,因为它非常有用!


1
太好了!可能需要重新启动Eclipse,就像我的情况一样。此外,在此窗口中,Ctrl+Shift+I并没有像承诺的那样起作用。 - alehro
可能默认情况下不会检查,因为有时会出现许多异常。不过,对于这个答案我给一个赞+1,如果可以的话我愿意加到+5。花了我很长时间才找到这个。 - eis

3
在调试视图中,点击产生异常的线程。

图片已在此处显示


2
据我所知,似乎不可能实现,这有点令人沮丧。就我所知,其他我使用过的IDE(如IntelliJ IDEA、Oracle JDeveloper)在这方面做得更好。
例如,IntelliJ IDEA 在异常断点上有一个选项,可以在触发异常断点时将表达式记录到控制台。在该表达式中,“this”是抛出的异常,因此您只需记录“this”,就会得到类似以下内容的输出:
Exception 'java.lang.IllegalStateException' occurred in thread 'main' at Silly.doThing(Silly.java:18)
java.lang.IllegalStateException: dead jim

看起来支持这个功能将是JDT的一个很好的增强...我在他们的错误数据库中没有找到任何相关的东西:https://bugs.eclipse.org/bugs/buglist.cgi?quicksearch=exception+breakpoint


我简直不敢相信这个功能不存在!我以为它存在的,感谢您查看错误/增强数据库。 - Hut8
1
一个调试器如果不能告诉你遇到了什么异常,那它看起来就不像是一个真正的调试器。 - speedplane

0

您可以在断点选项卡中的调试视图中查看异常的类型。 我已经附上了一张截图供您参考。在那里,我遇到了NullPointerException,它显示在断点选项卡中。 enter image description here


2
OP 不是在寻找异常的类型,而是它的消息。 - eis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接