2012-01-30 2 views
1

finally으로 만 catch되었을 때 어떤 예외가 발생했는지 확인할 수 있습니까?Eclipse에 catch가없는 경우 예외를 보는 방법은 무엇입니까?

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

즉 : 아래

표준 ThreadPoolExecutor입니다 코드에서 발췌 한 것입니다 여기는 no catch입니다. 내 디버거가 workerDone() RuntimeException을 나타내는 호출을 중지하지만, 여기에 예외 변수가 없기 때문에 나는 오류 메시지 또는 뭔가를 알 수있는 방법을 참조하십시오.

+2

... 할 수 없습니다. 예외가 무엇인지보고 싶다면'catch (Throwable t) {t.printStackTrace;}'를 넣으십시오. – bdares

+1

@bdares, 이것은 라이브러리 코드이므로 다시 컴파일하지 않으려합니다. –

답변

3

잡히지 않은 예외에 대해서는 디버거에서 "예외 중단 점"을 추가 할 수 있어야합니다. 일반적으로 이것은 Debug 퍼스펙티브의 "variables"탭 바로 옆에있는 탭이다.

+0

'Breakpoints'보기가됩니다. 느낌표가있는 J가 있는지보기 도구 모음에서 확인하십시오. – Chris

+1

디버거가 이미 중지됩니다. 난 그저 어떤 예외가 그것을 일으켰는지, 메시지를 읽거나 멈추는 것을 알 필요가있다. –

1

일식 일뿐만 아니라. Thread.setUncaughtExceptionHandler (...)를 사용할 수 있습니다. 다시 컴파일 할 수있는 경우 '실행'메서드 내에서 수행하십시오. ASAIK가 아니라면 기본 스레드에서 수행하더라도 "내부"스레드에서 예외를 catch합니다.

setUncaughtExceptionHandler Example

+0

게시 한 예는 전혀 쓸모가 없습니다. 이 출력입니다 :'당신 추락 스레드 스레드 3 예외였다 java.lang.RuntimeException가 : 스레드 java.lang.RuntimeException가에서 슬로우 de.utils.SetUncaughtExceptionHandler.run (SetUncaughtExceptionHandler.java에서 스레드 \t에서 슬로우 16) \t at java.lang.Thread.run (Thread.java:662)' –