使用Eclipse进行调试时,这是我的一个小麻烦。选中“在未捕获的异常上暂停执行”后,调试器通常将在抛出异常的位置暂停线程。但是,事件调度线程上的异常导致它在EventDispatchThread.run()的最后一行暂停。在继续线程以允许将堆栈跟踪打印到控制台之前,没有关于异常是什么或引起异常的有用信息。

在Eclipse中调试以下代码进行演示:

public class SuspendOnUncaughtTest {
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ((Object) null).toString();
            }
        });
    }
}


这是引发异常后的样子:


编辑10/21/2011:我想Eclipse或Java调试器没有什么奇怪的事情,只是在EventDispatchThread.pumpOneEventForFilters(int)中捕获并重新抛出了异常。我想没有办法告诉Eclipse“在将要捕获并可能重新抛出的异常上暂停执行”。太糟糕了。

最佳答案

在NeteBeans中看到了类似的结果,但是Thread.setDefaultUncaughtExceptionHandler()在这种情况下可能有用。有一个示例here

09-10 08:47
查看更多