중단 점을 설정하는 동안 Eclipse 에서이 이상한 오류가 발생합니다.
Unable to insert breakpoint Absent Line Number Information
컴파일러 옵션에서 확인란을 선택했지만 운이 없습니다.
중단 점을 설정하는 동안 Eclipse 에서이 이상한 오류가 발생합니다.
Unable to insert breakpoint Absent Line Number Information
컴파일러 옵션에서 확인란을 선택했지만 운이 없습니다.
답변:
Eclipse 3.4.1에서 동일한 오류 메시지가 나타났습니다. SUN JVM1.6.0_07이 Tomcat 6.0에 연결되었습니다 (다른 시스템 인 디버그 모드에서 실행 됨, Sun JVM1.6.0_16, 디버그 연결이 올바르게 작동 함).
창-> 환경 설정-> Java-> 컴파일러-> 클래스 파일 생성 : "생성 된 클래스 파일에 행 번호 속성 추가" 가 선택되었습니다. 나는 깨끗하고 재 컴파일했다. 나는 그것을 확인하지 않고 다시 컴파일하고 확인하고 다시 컴파일했다. 프로젝트가 전역 설정을 사용했는지 확인했습니다. 여전히 같은 메시지입니다.
나는 개미 빌드로 전환했다.
<javac srcdir="./src/java" destdir="./bin" debug="true">
여전히 같은 메시지입니다.
이 메시지의 원인과 사라지지 않는 이유를 찾지 못했습니다. 실행중인 Tomcat 디버그 세션과 관련이있는 것처럼 보이지만 연결이 끊어지면 다시 컴파일하면 문제가 해결됩니다. 그러나 디버거를 Tomcat에 연결하거나 연결된 디버그 세션 중에 새 중단 점을 설정하면 다시 나타납니다.
그러나 메시지가 잘못되었다는 것이 밝혀졌습니다 . 디버깅 전과 디버깅 중에 실제로 브레이크 포인트를 디버깅하고 설정할 수있었습니다 ( javap -l 도 줄 번호를 표시했습니다). 그래서 그냥 무시하십시오 :)
debug="true"
받는 사람 javac
의 작업 ant
빌드 스크립트 것은했다.
이로 인해 내 문제가 해결되었습니다.
Installed JREs
기본적으로 JDK
대신JRE
들어 봄 관련 문제는 경우에 따라서는 "줄 번호없이"클래스를 생성 것을 고려; 예를 들어 @Service
인터페이스가없는 주석이 달린 클래스의 경우 인터페이스를 추가하면 디버그 할 수 있습니다. 완전한 예는 여기 를 참조 하십시오 .
@Service("SkillService")
public class TestServiceWithoutInterface {
public void doSomething() {
System.out.println("Hello TestServiceWithoutInterface");
}
}
위의 서비스는 스프링에 의해 생성 된 인터페이스에 "줄 번호 누락"이 발생합니다. 실제 인터페이스를 추가하면 생성 문제가 해결됩니다.
public interface TestService {
void doSomething();
}
@Service("SkillService")
public class TestServiceImpl implements TestService {
public void doSomething() {
System.out.println("Hello TestServiceImpl");
}
}
BlackBerry SDK 측면 에서이 문제에 대한 답변이 있습니다. 어떤 이유로 컴파일러의 옵션을 몇 번이나 변경하더라도 실제 기본 설정 파일은 변경되지 않았습니다.
프로젝트의 .settings 폴더에서 org.eclipse.jdt.core.prefs 파일을 찾으십시오 .
여기에서 설정을 수동으로 수정할 수 있습니다.
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
편집 : 이것에 더하여, 나는 때때로 이클립스가주는 경고를 무시할 수 있으며, 여전히 필요한 장소에서 멈추게됩니다 ... 개발자로 일할 때
이것이 여전히 관련이 있는지 모릅니다. 아마도 다른 선원이 이것을 유용하게 사용할 것입니다.
디버그 플래그를 컴파일 한 클래스 파일이 있으면이 메시지가 나타납니다.
일식에서는 위에서 언급 한 옵션으로 켤 수 있습니다.
창-> 환경 설정-> Java-> 컴파일러-> 클래스 파일 생성 : "생성 된 클래스 파일에 행 번호 속성 추가"
그러나 jar 파일이 있으면 컴파일 된 출력을 얻게됩니다. 이 문제를 해결하는 쉬운 방법은 없습니다.
소스에 액세스 할 수 있고 ant를 사용하여 jar 파일을 얻는 경우 다음과 같이 ant 태스크를 수정할 수 있습니다.
<javac destdir="${build.destDir}" srcdir="${build.srcDir}" source="1.6" fork="true" target="${javac.target}" debug="on" debuglevel="lines,vars,source" deprecation="on" memoryInitialSize="512m" memoryMaximumSize="1024m" optimize="true" >
행복한 디버깅 ..
사용하고있는 이클립스의 버전과 기술 (Java JDT, Aspect Java의 경우 AJDT 또는 C ++ CDT 등)을 표시하면 도움이됩니다.
Java 측면에서, "컴파일러 옵션에서 확인란을 선택했습니다"가 이것을 참조한다고 가정합니다.
" Window --> Preferences --> Java --> Compiler --> Classfile Generation
"에서 모든 ' Class file
'생성 옵션은 True로 설정됩니다.
프로젝트가 글로벌 레벨 (Windows 환경 설정) 또는 프로젝트 특정 레벨에서만 점검 되었습니까?
그리고 클래스가 열렸습니까 (브레이크 포인트를 설정하려고 시도 함)
.java
A는하지 .class
?모든 것을 청소하고 모두 다시 빌드하고 잠재적 인 항아리 충돌을 확인하십시오 .
Eclipse에서 디버깅 모드로 Tomcat을 시작하려고 시도하는 동안이 문제가 발생했습니다. 컴파일 및 배포를 관리하는 ANT 빌드 파일이 있습니다. 디버그 플래그를 true로 설정하고 (다른 답변에서 언급했듯이) 응용 프로그램을 재배치하면 정상적으로 작동합니다.
<javac srcdir="./src/java" destdir="./bin" debug="true">
참고 : 방금 디버그 플래그를 추가하고 다시 컴파일 한 경우 Eclipse가 클래스 파일을 디버깅하는 위치이므로 애플리케이션 을 서버 에 다시 배치해야 합니다. 매우 명백하지만 한 시간 정도를 소비하여 머리를 긁고 왜 작동하지 않는지 궁금합니다 (나를 믿으십시오).
6 가지 버전의 Java가 설치되었으므로 사용하려는 Java 버전과 일치하도록 기본 JDK 준수를 변경해야했습니다. Eclipse는 모든 것이 Java 1.6을 사용하여 빌드 / 컴파일 될 때 기본적으로 컴파일러 준수 레벨을 Java 1.7로 설정했습니다.
그래서 내가 한 것은
이제 Eclipse는 더 이상 "중단 점 부재 번호 정보를 삽입 할 수 없습니다"에 대해 불평하지 않으며 디버깅 중단 점은 실제로 작동합니다 !!!
여기에 자세히 설명되어 있습니다.
https://github.com/spring-projects/spring-ide/issues/78
나중에 참조하기 위해 이것은 대답의 관련 부분입니다 (Spring Boot 응용 프로그램을 나타내는 사실을 무시하고 동작은 다른 많은 경우와 동일합니다).
Eclipse / STS에서 중단 점을 설정할 때마다 IDE는 앱을 실행하면 VM에서 중단 점을 설정하려고합니다. 디버그 모드에서 부팅 앱을 실행할 때 이런 일이 발생합니다.
JVM에로드되는 각 클래스에 대해 IDE는 중단 점을 설정해야하는지 여부를 확인합니다. 중단 점을 설정하기로 결정한 경우,이를 시도합니다 (일반적으로 주어진 행의 소스 파일에 행 중단 점을 설정하므로 행 번호를 포함하여 IDE의 중단 점 정의 정보를 사용하여).
이 결정 (로드 된 특정 클래스에서 중단 점 설정 여부)은 중단 점을 설정 한 유형, 포함 유형 및 내부 클래스를 확인합니다. 이렇게하면 내부 클래스 (익명 내부 클래스)의 중단 점이 JVM으로 설정되고 무시되지 않습니다.
Spring Boot는 런타임에 컨트롤러의 내부 클래스를 생성합니다 (이것은 오류 메시지에 나타나는 CGLIB 생성 내부 클래스입니다). JVM이 해당 클래스를로드 할 때 (이 내부 클래스에 대해) 엔 클로징 유형의 줄 번호 중단 점을 설정하려고합니다. 생성 된 내부 클래스에는 행 번호 정보가 없으므로 (행 번호 정보가 필요하지 않음) 언급 된 오류 메시지와 함께이 내부 클래스의 중단 점 설정에 실패합니다.
IDE가 엔 클로징 유형 (컨트롤러 클래스 자체)을로드 할 때 줄 바꿈 지점을 설정하려고 시도하여 성공합니다. 이것은 브레이크 포인트 마커의 확인 표시와 함께 시각화됩니다.
따라서 표시되는 오류 메시지를 무시해도됩니다. 이 오류 메시지가 표시되지 않도록하려면 환경 설정 (Java-> 디버그)으로 이동하여 "행 번호 속성 누락으로 인해 중단 점을 설치할 수 없을 때 경고"를 사용하지 않도록 설정하십시오.
내 상황은 비슷했다.
spyTask = spy(new Task())
Task.java
)이 중단 점은 실행할 때마다 해당 오류를 생성합니다. Debug As... > JUnit Test
문제를 해결하기 위해 Breakpoint 'up'을 실제 테스트 (TaskTest.java 내부)로 옮겼습니다. 실행이 중지되면 원래 (Task.java 내부)에 중단 점을 다시 추가했습니다.
여전히 같은 오류가 발생하지만 "확인"을 클릭하면 중단 점이 정상적으로 작동합니다.
누군가를 돕는 희망,
-여
이 메시지에 대한 또 다른 이유를 찾았습니다. 스칼라를 프로그래밍하고있었습니다. 해결책은 다음과 같습니다.
이제 디버깅이 작동합니다. Scala IDE 플러그인을 설치했습니다.이 옵션이 없으면이 옵션을 사용하지 못할 수 있습니다.
JBoss 7.1에서도 같은 오류가 발생했습니다. 그리고 Zefiro와 같은 작업을 수행했습니다. 오류를 무시하고 중단 점을 정상적으로 배치 할 수있었습니다. 내 경우에는 생각 개미 작성기를 구축하고 있었고 이것은 내 javac 작업입니다.
<javac
srcdir="${src.dir}"
destdir="${build.classes.dir}"
includeantruntime="false"
debug="${debug}"
verbose="false"
debuglevel="lines,vars,source"
source="1.6"
target="1.6">
<!-- Sppressing warning for setting an older source without bootclasspath
(see: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source) -->
<compilerarg value="-Xlint:-options"/>
<classpath>
<fileset dir="${lib.dir}" includes="*.jar" />
<fileset dir="${jboss.lib.dir}" includes="**/*.jar" />
</classpath>
</javac>
내 문제는 2 개의 JAR을 가지고 있었고 순서에 따라 다른 것을 재정의하려고했습니다. Java Build Path => Order & Export
Eclipse 탭에서 하나는 디버깅을위한 것이었고 다른 하나는 디버깅을하지 않았기 때문입니다 (디버깅 JAR이 순서대로 우선). 이렇게하면 소스를 수동으로 연결해야했습니다.
디버그가 아닌 JAR을 제거하고 디버그 JAR을 \ WEB-INF \ lib \ 디렉토리, 정리, 빌드 등에 배치하려고 시도했지만 작동했습니다. 이번에는 (첨부 된 소스를 제거하면) 소스를 수동으로 첨부하지 않고도 디버그 코드를 자동으로 탐색 할 수 있습니다. 중단 점과 디버그도 작동했습니다.
여전히 문제가있는 사람은 다른 답변에 언급 된 모든 특정 솔루션을 시도했습니다.
Add line number attributes...
org.eclipse.jdt.core.prefs
다른 답변에서 언급 한대로 수동 편집 : https : //.com/a/31588700/1599699또한 서버를 정상적으로 종료하고 (java.exe가 실제로 닫혔는지 확인) 두 프로젝트에서 \ build \ 디렉토리를 삭제하고 -clean 매개 변수로 Eclipse를 다시 시작하고 디버그 JAR을 다시 작성하고 새로 고침합니다. 디버그 JAR로 프로젝트를 정리하고 빌드하여 디버그 모드에서 서버 시작, 공개 / 정리 및 중단 점.
항아리를 컴파일 / 빌드하는 동안 위에 나열된 모든 것을 수행했지만 여전히 동일한 문제가 있습니다.
결국 서버를 시작하는 동안 아래 나열된 jvmarg 변경 사항이 마침내 저에게 효과적이었습니다.
1) javaagent 및 bootclasspath와 관련된 많은 jvm arg를 제거하거나 주석 처리했습니다.
2) 다음 줄을 켜거나 주석 처리를 제거하십시오.
그런 다음 서버를 시작할 때 중단 점에 도달 할 수 있습니다. javaagent가 어떻게 든 행 번호를 감지하는 Eclipse의 기능을 방해하고 있다고 생각합니다.
다음을 확인 / 수행하십시오 :
1) "창-> 환경 설정-> Java-> 컴파일러-> 클래스 파일 생성"에서 모든 옵션은 True 여야합니다.
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) 프로젝트의 .settings 폴더에서 org.eclipse.jdt.core.prefs라는 파일을 찾으십시오. org.eclipse.jdt.core.compiler.debug.lineNumber = generate를 확인하거나 설정하십시오.
3) 오류 창이 계속 나타나면 확인란을 클릭하여 오류 메시지를 표시하지 마십시오.
4) 프로젝트를 정리하고 빌드하십시오. 디버깅을 시작하십시오.
일반적으로 오류 창이 더 이상 표시되지 않으며 디버깅 정보가 올바르게 표시됩니다.
@ManagedBean (javax.annotation.ManagedBean)으로 클래스에 주석을 달 때이 문제가 발생했습니다. JBoss EAP 6.2.0에서 새로 호환 된 앱을 실행할 때 경고 메시지가 나타납니다. 그것을 무시하고 어쨌든 실행해도 도움이되지 않았습니다. 브레이크 포인트에 도달하지 못했습니다.
JSF 페이지에서 EL을 사용하여 해당 Bean을 호출했습니다. 이제 ... @ManagedBean이 그다지 좋지 않을 수도 있습니다 (CDI를 처음 사용합니다). 주석을 @Model로 변경하면 Bean이 실행되었지만 중단 점 경고도 사라지고 예상대로 중단 점에 도달했습니다.
요약하자면, @ManagedBean 주석이 잘못된 주석인지 여부에 관계없이 줄 번호를 엉망으로 한 것처럼 보입니다.