2012-04-20 4 views
7

나는 디 컴파일 코드에서 조건부 중단 점을 설정하려고하지만, Eclipse는 나에게 오류를주고 계속 :Eclipse 조건부 중단 점이 손상 되었습니까?

Conditional breakpoint has compilation error(s)

Reason: Evaluations must contain either an expression or a block of well-formed statments

내 경우는 아주 간단합니다, 그냥 문자열 값에 대해 비교하려고합니다. 나는 다음의 모든 시도하고 나는 모든 하나 하나에 오류를 얻을 :

myObj.toString() == "abc123" 
myObj.toString().equals("abc123") 
if(myObj.toString() == "abc123"){ return true; } 
true == true 

내가 또한 필요 또는 라인 (들)의 끝에 세미콜론을 가지고 있지의 모든 조합을 시도하고 모든 조합 띄어쓰기와 줄 바꿈, 그리고 내 조건을 둘러싸고 있거나 가지지 않는 모든 조합. 기본적으로, 나는 이것이 작동하지 않는 이유를 모르겠다 ...

내가 디버그하려고하는 코드는 JD-Eclipse로 디 컴파일 된 jar 파일 안에있다. 정상적인 중단 점은이 코드에서 잘 작동합니다.

아무도 무슨 일이 일어나고 있는지 아시나요 ???

+0

디 컴파일 된 소스에서 jar 파일을 다시 컴파일 했습니까? 그렇지 않으면 jar 파일과 일치하지 않습니다. 로컬 변수 이름 – vickirk

+0

흠 그러나 소스에 존재하지 않는 변수 이름을 사용하려고하면 변수 이름이 잘못되었다는 다른 오류가 발생합니다 ... – kand

+0

1 단계는 디 컴파일이 문제인지 확인하는 것입니다. Eclipse 프로젝트에서 '일반적인'코드의 조건부 중단 점 설정이 작동합니까? – sharakan

답변

2

Eclipse FAQ 페이지에는 적절한 CBP 정의 구문과 작동하지 않는 가장 일반적인 이유가 들어 있습니다. 귀하의 경우에는, 나는 다음이 적용 생각 :

This can happen if you are setting a breakpoint in a class whose class file does not contain a local variable table. For example, let's say you want to set a conditional breakpoint on Class.forName(String). If you have a source attachment for rt.jar the content assist will allow you to refer to the argument by its variable name, className. However, at debug runtime, the variable name will only be known if the class file contains a local variable table. Depending on the options used at compilation time, this information may have been stripped from the class file.

JD는 디 컴파일하여 항아리, 그래서 조건식에서 "myObj로"를 사용하는 동안 변수 이름을 제작 컴파일 타임 오류가 발생했을 수 있습니다.

+2

예상대로 작동하지만 OP는 분명히 true를 시도했습니다. == true, 변수가 이름이 엉망이 됐어! – sharakan

+0

@sharakan 네가 맞아! 이상하다. true == true로 무엇이 잘못 될 수 있는지 확실하지 않습니다. – mazaneicha

+0

@mazaneicha FAQ 페이지에 내용이없는 것 같습니다. 내 클래스 파일에 대해 실제로 생성 된 테이블을 볼 수있는 방법이 있습니까? – kand

2

조건부 중단 점이 일반적으로 작동하는 것보다 적을 수 있습니다. 예를 들어, 고려 :

https://bugs.eclipse.org/bugs/show_bug.cgi?id=278146

+0

FYI, 이것은 4.3 M6에서 수정 된 것으로 표시된 https://bugs.eclipse.org/bugs/show_bug.cgi?id=341232의 복제본입니다. – studgeek

1

그것은 일식에서 버그가 수 있습니다. 이클립스는 중단 점을 설정하고 컴파일하는 파일에 대해 새 메서드 또는 일부를 소스에 삽입합니다. 이 과정에서 문제가 발생하면 조건부 중단 점이 신비하게 실패합니다. 당신은 내가 시도하고 문제를 추적하기 위해 디버그에서 일식을 실행, 아래의 사용 방법에 따라 수

: -

당신은 단지 수익을 추가해야합니다 "진정한 == true"로 조건의 경우 https://bugs.eclipse.org/bugs/show_bug.cgi?id=341232#c21

0

성명 :

return true == true; 

나머지 지역 변수 테이블은 설명이 있어야합니다. +1 Mazaneicha. 설명해야 지역 변수 테이블을 누락 문제의 나머지 부분

return true == true; 

: 당신은 그냥 return 문을 추가해야합니다 "진정한 == true"로 조건의 경우

0

. +1 Mazaneicha. 당신이 이름으로 메소드 인수를 참조하려는 경우

다음 단지 등 예를 들어

"는 arg0", "ARG1 '로 이름을 변경하려고하면 다음과 같이 수행 할 수 있습니다

arg0 == null 

변수 이름을 쉽게 추측 할 수 있습니다.그냥 비 구분 적 중단 점을 넣고 변수보기에서 변수 목록을보십시오.

0

다른 사람들에게 도움이 될만한 정보를 추가하면 잠시 후에 해결할 수 있습니다. 이 문제가 발생하면 디버깅을 위해 JD-Eclipse도 사용하고 있습니다.

필요한 모든 jar 파일이 클래스 경로에 있는지 확인하십시오. 조건문은 "return true"와 같이 매우 간단 할 수 있습니다. 하지만 일단 "조건부 중단 점"체크 박스가 선택되면 Eclipse 디버거가 이클립스 프로젝트의 클래스 경로를 더 큰 범위에 대해서만 체크하고 "return true"라인이 아닌지 (필자도 확신 할 수 없다) 될 수있다.

JD-Eclipse를 사용하고 있기 때문에 모든 필요한 jar 파일을 추가하지 않았습니다. 프로젝트의 클래스 경로에 jar 파일을 추가 한 후에 문제가 해결되었습니다.

원격 디버깅을 사용하는 경우 Eclipse 프로젝트의 JDK가 대상 JVM의 JRE와 호환되도록 구성 할 수도 있습니다.

관련 문제