2012-01-30 44 views
1

只有finally才能確定發生了哪個異常?如何在Eclipse中沒有捕獲時觀察異常?

下面是從標準的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,但由於這裏沒有異常變量,我看不出錯誤消息或其他東西。

+2

......你不能。如果你想看看異常是什麼,就放入一個catch(Throwable t){t.printStackTrace;}。 – bdares 2012-01-30 19:28:28

+1

@bdares,這是庫代碼,我不想重新編譯它 – 2012-01-30 19:30:14

回答

3

您應該能夠在調試器中爲未捕獲的異常添加「異常斷點」。通常,這是調試透視圖中「變量」選項卡旁邊的選項卡。

+0

這將是'斷點'視圖。用感嘆號檢查視圖的工具欄中的J。 – Chris 2012-01-30 19:56:00

+1

調試器已停止。我只需要知道什麼異常導致它,讀取它的消息或禁用停止。 – 2012-02-07 15:48:44

1

不僅用於日食。 您可以使用Thread.setUncaughtExceptionHandler(...) 如果您可以重新編譯,那麼在'run'方法內執行。 如果不是,ASAIK,即使你在主線程中這樣做,你也會在「內部」線程中捕獲異常。

setUncaughtExceptionHandler Example

+0

您發佈的示例相當無用。這是它的輸出:''''你崩潰的線程Thread-3 異常是:java.lang.RuntimeException:拋出線程 java.lang.RuntimeException:拋出線程 \t在de.utils.SetUncaughtExceptionHandler.run(SetUncaughtExceptionHandler.java: 16) \t at java.lang.Thread.run(Thread.java:662)' – 2012-10-31 18:15:45