Programming

Eclipse-행 번호 속성이 누락되어 중단 점을 설치할 수 없습니다.

procodes 2020. 3. 1. 16:02
반응형

Eclipse-행 번호 속성이 누락되어 중단 점을 설치할 수 없습니다.


중단 점을 설정하는 동안 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 도 줄 번호를 표시했습니다). 그래서 그냥 무시하십시오 :)


  1. 이클립스 메뉴에서 창-> 환경 설정-> Java-> 컴파일러로 이동하십시오.
  2. 확인란의 "행 번호 속성 추가 ..."표시를 해제하십시오.
  3. 적용-> 예를 클릭하십시오.
  4. 체크 박스 "행 번호 속성 추가 ..."
  5. 다시 신청하십시오.
  6. 즐거운 디버깅

이로 인해 내 문제가 해결되었습니다.

  1. 창-> 환경 설정-> 서버-> 런타임 환경
  2. 아파치 톰캣-> 편집
  3. JRE 대신 JDK를 선택하십시오.

들어 관련 문제는 경우에 따라서는 "줄 번호없이"클래스를 생성 것을 고려; 예를 들어 @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

편집 : 이것에 더하여, 나는 때때로 이클립스가주는 경고를 무시할 수 있으며, 여전히 필요한 장소에서 멈출 것입니다 ... curioser and curioser ... 나는 우리가 다루는 것을 배우는 것들의 양동이에 넣었습니다. 개발자로 일할 때


이것은 나를 위해 일했다 :

  1. 에서 Window --> Preferences --> Java --> Compiler --> Classfile Generation모든 옵션은이어야합니다 True.
  2. 제작 debug="true"build.xml 파일의에서 <javac>작업.
  3. 개미에 의해 생성 된 전쟁으로 바람둥이에 응용 프로그램을 배포하십시오.
  4. Debug모드 에서 Tomcat을 다시 시작했습니다.

이것이 여전히 관련이 있는지 모릅니다. 아마도 다른 선원이 이것을 유용하게 사용할 것입니다.

디버그 플래그를 컴파일 한 클래스 파일이 있으면이 메시지가 나타납니다.

일식에서는 위에서 언급 한 옵션으로 켤 수 있습니다.

창-> 환경 설정-> 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"   >

행복한 디버깅 ..

심판 : http://doc.sumy.ua/prog/Java/javanut/ch16_04.htm


사용중인 이클립스의 버전과 기술 (Java JDT, Aspect Java의 경우 AJDT 또는 C ++ CDT 등)을 표시 한 경우 도움이됩니다.

Java 측면에서, "컴파일러 옵션에서 확인란을 선택했습니다"가 이것을 참조한다고 가정합니다.

" Window --> Preferences --> Java --> Compiler --> Classfile Generation"에서 모든 ' Class file'생성 옵션은 True로 설정됩니다.

  • (1) 변수 속성 추가
  • (2) 추가 번호,
  • (3) 소스 파일 이름을 추가하십시오.
  • (4) 사용하지 않은 지역 변수를 보존하십시오.

프로젝트가 글로벌 레벨 (Windows 환경 설정) 또는 프로젝트 특정 레벨에서만 점검 되었습니까?

그리고 클래스를 열었습니까 (브레이크 포인트를 설정하려고 시도 함) :

  • 소스 중 하나이며 타사 라이브러리에서 제공되지 않습니다.
  • A는 .javaA는하지 .class?

모든 것을 청소하고 모두 다시 빌드하고 잠재적 인 항아리 충돌을 확인하십시오 .


Eclipse에서 디버깅 모드로 Tomcat을 시작하려고 시도하는 동안이 문제가 발생했습니다. 컴파일 및 배포를 관리하는 ANT 빌드 파일이 있습니다. 디버그 플래그를 true로 설정하고 (다른 답변에서 언급했듯이) 응용 프로그램을 재배치하면 정상적으로 작동합니다.

<javac srcdir="./src/java" destdir="./bin" debug="true">

참고 : 방금 디버그 플래그를 추가하고 다시 컴파일 한 경우 Eclipse가 클래스 파일을 디버깅하는 위치이므로 애플리케이션 을 서버 다시 배치해야 합니다. 매우 명백하지만 한 시간 정도를 소비하여 머리를 긁고 왜 작동하지 않는지 궁금합니다 (믿어보십시오).


을 변경하려고 jre당신은을 use.Set jre의 폴더에 JDK대신.


6 가지 버전의 Java가 설치되었으므로 사용하려는 Java 버전과 일치하도록 기본 JDK 준수를 변경해야했습니다. Eclipse는 기본적으로 Java 1.6을 사용하여 모든 것이 빌드 / 컴파일 될 때 컴파일러 준수 레벨을 Java 1.7로 설정했습니다.

그래서 내가 한 것은

  1. 이클립스 메뉴에서 창-> 환경 설정-> Java-> 컴파일러로 이동하십시오.
  2. JDK 준수에서 컴파일러 준수 수준을 1.7에서 1.6으로 변경했습니다.

이제 Eclipse는 더 이상 "중단 점 부재 번호 정보를 삽입 할 수 없습니다"에 대해 불평하지 않으며 디버깅 중단 점은 실제로 작동합니다 !!!


나는 거의 모든 해결책을 시도했지만 운이 없다. "다시 말하지 않음"을 클릭 해 보셨습니까? 그렇게 한 후 프로그램을 다시 시작했는데 모든 것이 잘되었습니다. 이클립스는 아무것도 잘못되지 않은 것처럼 내 중단 점에 부딪쳤다.

저의 근본 원인은 Eclipse가 자동 생성 된 Spring CGLIB 프록시 객체에 대한 디버깅을 설정하려고했기 때문입니다. 해당 수준에서 무언가를 디버깅해야하는 경우가 아니면 문제를 무시해야합니다.


다른 방법이 없으면 디버그 퍼스펙티브를 열고 기존의 모든 중단 점을 지우고 다시 설정하십시오.


내 상황은 비슷했다.

  • JUnit 테스트를 디버깅하고있었습니다.
  • 나는 Mockito를 사용하여 스파이를 만들었습니다. spyTask = spy(new Task())
  • 나는 염탐했다는 클래스의 중단 점의 내부 (내부를 넣어 Task.java)

이 중단 점은 실행할 때마다 해당 오류를 생성합니다. Debug As... > JUnit Test

문제를 해결하기 위해 Breakpoint 'up'을 실제 테스트 (TaskTest.java 내부)로 옮겼습니다. 실행이 중지되면 원래 (Task.java 내부)에 중단 점을 다시 추가했습니다.

여전히 같은 오류가 발생하지만 "확인"을 클릭하면 중단 점이 정상적으로 작동합니다.

누군가를 돕는 희망,

-여


부두 서버를 만들고 ANT가 새 .war 파일을 컴파일 할 때도 같은 문제가있었습니다. 이전에 작성된대로 Java 컴파일러를 설정 한 후 동일한 버전의 jdk / jre 컴파일러 및 빌드 경로 (예 : jdk 1.6v33, jdk 1.7, ....)를 만들어야합니다.

나는 모든 것을했지만 여전히 작동하지 않습니다. 해결책은 컴파일 된 .class 파일과 생성 된 war 파일의 대상을 삭제하고 이제는 작동합니다.)


Spring AOP와 함께이 메시지를 얻었습니다 (CGLIB 라이브러리에서 온 것 같습니다). 무시를 클릭하면 정상적으로 작동하지만 여전히 디버깅 할 수 있습니다.


이 메시지에 대한 또 다른 이유를 찾았습니다. 스칼라를 프로그래밍하고있었습니다. 해결책은 다음과 같습니다.

  1. 실행-> 디버그 구성을여십시오.
  2. 기본 탭의 하단에있는 "적용"및 "복귀"버튼 옆에 사용중인 시작 관리자를 나타내는 텍스트가 있으며 그 옆에는 "기타 선택"이라는 하이퍼 링크가 있습니다. 그것은 이상한 UI 요소이며 언뜻보기에는 실행 가능하지 않습니다.
  3. "다른 선택"링크를 사용하여 "Scala Application (새 디버거) 실행기"를 선택하십시오. 다른 하나는 스칼라에서 작동하지 않는 것 같습니다.

이제 디버깅이 작동합니다. Scala IDE 플러그인을 설치했습니다.이 옵션이 없으면이 옵션을 사용하지 못할 수 있습니다.


Tomcat에 배포 된 WAR (여러 Eclipse 프로젝트 아티팩트로 구성)을 디버깅 할 때도 동일한 문제가 발생했습니다.

ANT 빌드 스크립트를 사용하여 모든 것을 만들고 있습니다. 이것이 당신이하고있는 일이라면, 가지고있는 모든 javac ant 작업에 debug = true 플래그가 설정되어 있는지 확인하십시오. 이것이 나의 유일한 문제였습니다. 문제가 도움이되기를 바랍니다.


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>

같은 문제가 발생하여 솔루션을 찾는 데 많은 시간을 보냈지 만 이러한 솔루션은 쓸모가 없으므로 모든 사례를 스스로 연구하고 마침내 JDK 버전 간의 충돌이라는 문제를 발견했습니다. 다음은 문제를 해결하는 단계입니다. 1. 모든 JDK 및 JRE 버전을 제거하고 한 버전 만 유지하십시오. 2. JAVA_HOME 시스템을 설정하고 Eclipse에서 Java 컴파일러는 동일합니다. 경우에 따라 위의 오류는 사라지지 않지만 디버그 모델에서 실행할 수 있습니다.


junit과 Mockito를 사용할 때 동일한 오류가 발생하면 @PrepareForTest정적 클래스 를 추가 하는 것을 잊었습니다 .

아래 코드를 추가하면 문제가 해결되었습니다.

@PrepareForTest({XXXXX.class})

같은 경우인지 확실하지 않습니다.


여기에 자세히 설명되어 있습니다.

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-> 디버그)으로 이동하여 "행 번호 속성 누락으로 인해 중단 점을 설치할 수 없을 때 경고"를 사용하지 않도록 설정하십시오.


항아리를 컴파일 / 빌드하는 동안 위에 나열된 모든 것을 수행했지만 여전히 동일한 문제가 있습니다.

결국 서버를 시작하는 동안 아래 나열된 jvmarg 변경 사항이 마침내 저에게 효과적이었습니다.

1) javaagent 및 bootclasspath와 관련된 많은 jvm 인수를 제거 / 코멘트했습니다.

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) 프로젝트를 정리하고 빌드하십시오. 디버깅을 시작하십시오.

일반적으로 오류 창이 더 이상 표시되지 않으며 디버깅 정보가 올바르게 표시됩니다.


나는 또한이 문제에 부딪쳤다. 개미 빌드 스크립트를 사용하고 있습니다. 레거시 응용 프로그램에서 작업 중이므로 jdk 버전 1.4.2를 사용하고 있습니다. 이것은 작동하기 때문에 주변을 둘러보기 시작했습니다. JRE 탭의 디버그 구성에서 Java 버전이 1.7로 설정되었습니다. 1.4로 다시 변경하면 효과가있었습니다.

이게 도움이 되길 바란다.


로깅 관리자를 디버그하려고했으며 jre를 jdk로 변경 한 다음 "기본"탭, "Java 런타임 환경"에서이 jdk를 선택해야했습니다. 디버그 구성의 "런타임 JRE"는 모두 잘 작동했습니다.


@ManagedBean (javax.annotation.ManagedBean)으로 클래스에 주석을 달 때이 문제가 발생했습니다. JBoss EAP 6.2.0에서 새로 호환 된 앱을 실행할 때 경고 메시지가 나타납니다. 그것을 무시하고 어쨌든 실행해도 도움이되지 않았습니다. 브레이크 포인트에 도달하지 못했습니다.

JSF 페이지에서 EL을 사용하여 해당 Bean을 호출했습니다. 이제 ... @ManagedBean이 그다지 좋지 않을 수도 있습니다 (CDI를 처음 사용합니다). 주석을 @Model로 변경하면 Bean이 실행되었지만 중단 점 경고도 사라지고 예상대로 중단 점에 도달했습니다.

요약하자면 @ManagedBean 주석이 잘못된 주석인지 여부에 관계없이 줄 번호를 엉망으로 한 것처럼 보입니다.


런타임 기본 클래스 가있는 프로젝트 가 중단 점이있는 프로젝트와 동일한 프로젝트 인지 확인하십시오 . 그렇지 않은 경우 두 프로젝트가 모두 실행 구성의 클래스 경로에 있고 jar 및 클래스 폴더 앞에 표시되는지 확인하십시오 .


하나의 특정 프로젝트와 동일한 문제가 있었으며 Window-> Preferences에서 줄 번호 속성을 재설정하려고 시도했습니다 ... 그런 다음 각 프로젝트에 줄 번호 속성에 대한 자체 설정이 있음을 깨달았습니다. 프로젝트를 마우스 오른쪽 단추로 클릭하고 특성으로 이동 한 후 JavaCompiler를 선택하고 "행 번호 속성 추가 ..."상자를 선택하십시오.


위의 솔루션이 작동하지 않고 스프링 빈 주입을 한 후에 문제가 발생하기 시작하면 주입 된 클래스에 인터페이스를 사용하지 않았을 수 있습니다. 인터페이스를 구현하는 클래스로 주입하면 문제가 해결됩니다. 예를 들어 다음 링크를 따르십시오. Bean 작성에 중단 점 문제점을 설치할 수 없습니다 .

참고 URL : https://stackoverflow.com/questions/957822/eclipse-unable-to-install-breakpoint-due-to-missing-line-number-attributes



반응형