1

是否可以确定finally仅在被捕获时发生了哪个异常?

以下是标准 ThreadPoolExecutor 代码的摘录:

    public void run() {
        try {
            Runnable task = firstTask;
            firstTask = null;
            while (task != null || (task = getTask()) != null) {
                runTask(task);
                task = null;
            }
        } finally {
            workerDone(this);
        }
    }

即这里没有catch。我的调试器在调用时停止,workerDone()指示发生了 RuntimeException,但由于这里没有异常变量,我看不出有什么办法知道错误消息或其他东西。

4

2 回答 2

3

您应该能够在调试器中为未捕获的异常添加“异常断点”。通常,这是 Debug 透视图中“变量”选项卡旁边的选项卡。

于 2012-01-30T19:29:13.057 回答
1

不仅适用于日食。您可以使用 Thread.setUncaughtExceptionHandler(...) 如果可以重新编译,则在“运行”方法中进行。如果不是,ASAIK,即使您在主线程中执行此操作,您也会在“内部”线程中捕获异常。

setUncaughtExceptionHandler 示例

于 2012-01-30T19:45:08.367 回答