4

다음 클래스가 있고 표시된 위치에서 arg == null에 조건부 중단 점을 설정한다고 가정합니다. 이클립스에서 작동하지 않고 "조건부 중단 점에 컴파일 오류가 있습니다"라는 오류를 표시합니다 이유 : arg를 변수로 확인할 수 없습니다 ".최종 로컬 변수에 따라 익명 내부 클래스에서 조건부 중단 점을 설정하는 방법은 무엇입니까?

관련 정보가 here 인 것을 발견했지만, val $ arg == null (val $ arg는 디버거의 변수보기에 표시된 변수 이름)로 조건을 변경하더라도 Eclipse에서 동일한 오류가 발생합니다.

public abstract class Test { 

    public static void main(String[] args) { 
     Test t1 = foo("123"); 
     Test t2 = foo(null); 
     t1.bar(); 
     t2.bar(); 
    } 

    abstract void bar(); 

    static Test foo(final String arg) { 
     return new Test() { 
      @Override 
       void bar() { 
       // I want to set a breakpoint here with the condition "arg==null" 
       System.out.println(arg); 
      } 
     }; 
    } 
} 

답변

2

는 로컬 클래스의 필드로 인수를 배치 시도 할 수 있습니다.

static Test foo(final String arg) { 
    return new Test() { 
     private final String localArg = arg; 
     @Override 
      void bar() { 
      // I want to set a breakpoint here with the condition "arg==null" 
      System.out.println(localArg); 
     } 
    }; 
} 
4

난 단지 추한 해결 방법을 제공 할 수 있습니다 :

if (arg == null) { 
    int foo = 0; // add breakpoint here 
} 
System.out.println(arg); 
+1

조건부 중단 점 * 죽일 * 성능, 해결이되지 않도록 * 내 눈 ... 추악한 * –

+0

이 코드를 스캔 수표를 가지고 있기 때문에 나는 종종 중단 점으로 Thread.yield()를 사용 그것의 공개되지 않도록합니다. –

+0

이것은 항상 옵션이 아닙니다 (즉, 클래스가 별도의 Jar 파일에 정의 된 경우). 디버깅 후 코드를 다시 변경해야합니다. 이 문제를 해결하기 위해 종종 다음과 같은 코드를 변경합니다. String myArg = arg; System.out.println (myArg); – Axel

관련 문제