2012-01-30 13 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です。私のデバッガはRuntimeExceptionが発生したことを示すworkerDone()コールで停止しますが、ここでは例外変数ではないので、エラーメッセージなどを知る方法はありません。

+2

...できません。例外が何であるか知りたい場合は 'catch(Throwable t){t.printStackTrace;}'を入れてください。 – bdares

+1

@bdares、これはライブラリのコードなので、再コンパイルしたくありません –

答えて

3

キャッチされていない例外については、デバッガに「例外ブレークポイント」を追加することができます。通常、これはデバッグパースペクティブの[変数]タブのすぐ隣にあるタブです。

+0

これは 'Breakpoints'ビューです。ビューのツールバーで、感嘆符付きのJを確認します。 – Chris

+1

デバッガは既に停止しています。私は例外を引き起こしたことを知り、メッセージを読むか停止するのを止める必要があります。 –

1

日食だけでなく、 Thread.setUncaughtExceptionHandler(...)を使用できます。 再コンパイルできる場合は、「実行」メソッドの内部で実行します。 ASAIKでない場合は、メインスレッドでそれを行っても、 "内部"スレッドの例外をキャッチします。

setUncaughtExceptionHandler Example

+0

あなたが投稿した例は全く役に立たない。これはその出力です: 'スレッドスレッド3をクラッシュしました 例外:java.lang.RuntimeException:スレッドからスローされました java.lang.RuntimeException:スレッドからスローされました \t de.utils.SetUncaughtExceptionHandler.run(SetUncaughtExceptionHandler.java: 16) \t at java.lang.Thread.run(Thread.java:662) ' –

関連する問題