내 Eclipse 프로젝트에 팬텀 디버거 중단 점이있는 이유는 무엇입니까?
Eclipse 디버거에서 실행할 때 항상 파일이 열리는 FileInputStream.class 줄 106에서 중지되는 것처럼 보이는 작은 프로젝트가 있습니다. 중단 점이 설정되지 않았지만 Eclipse는 여기에 중단 점이있는 것처럼 정확히 작동합니다. 모든 중단 점을 지우면 여전히 발생합니다.
이 문제가 발생하지 않는 동일한 Eclipse 작업 공간에 두 번째로 큰 프로젝트가 있습니다.
저는 이전 Linux 컴퓨터에서이 작은 프로젝트를 Europa Eclipse에서 개발하고이 문제가 발생한 새 Windows 컴퓨터로 이동했습니다. 여기서 Ganymede Eclipse에서 계속 문제를 확인했습니다. 문제는 운영 체제와 Eclipse 버전간에 지속되지만 프로젝트 간에는 분명하지 않습니다. 이해가 안 돼요! 이 프로젝트의 디렉토리에있는 모든 파일을 살펴 보았지만 어떻게 든 이클립스가 FileInputStream에서 중지하도록 지시하는 파일을 찾을 수 없었습니다.
추가 정보 : 명백한 중단 점은 실제로 FileInputStream의 106 행이 아닙니다. FileInputStream의 해당 줄에서 호출 된 네이티브 코드에서 throw되는 FileNotFoundException에 대한 예외 중단 점 인 것처럼 보입니다. 그러나 다시 말하지만 중단 점을 전혀 설정하지 않은 것 같습니다. 예외 중단 점이 다른 곳에 정의되어 있습니까?
선택 취소하려고 했습니까?
Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions
? (예를 들어이 스레드에서 언급했듯이 )
Eclipse가 그렇게 작동하는 이유는 무엇입니까?
그것은 2002 년까지 거슬러 올라갑니다 중단 점 개체 계층 구조 아래로 제거되었습니다.
중단 점을 설정하려면 이전 API를 사용하여 클라이언트
IType
에IField
, 등의 Java 모델 개체
가 필요했습니다. 새 API를 사용하면 디버그 모델에 필요한 것은 유형 이름, 필드 이름 등입니다.이를 통해 클라이언트는 Java Model Object를 사용할 수 없을 때 중단 점을 설정할 수 있습니다.
이제 클라이언트는 중단 점을 연결할 리소스를 지정합니다 (연결된 Java 모델 리소스로 제한하기 전에).중단 점은 이제 "숨길"수도 있습니다 . 즉, 중단 점 관리자에 등록 할 필요가 없습니다.
중단 점은 선택적으로 지속될 수도 있습니다 (마커는 마커 유형의 전부 / 아무것 만 지속되도록 허용).
이것은 디버그 모델을 더 유연하게 만들고 클라이언트에게 더 많은 빌딩 블록을 제공합니다.이는 또한 Java 디버그 구현의 일부를 단순화했습니다. 예를 들어 "
suspend on any uncaught exception
" 기능 은 특정 프로젝트의 특정 유형이java.lang.Throwable
아닌 " " 유형의 중단 점을 설정합니다IType
.
중단 점은 중단 점 관리자 (즉, 숨김 )에 등록되지 않습니다 . 하나의 클라이언트에서만 알고 사용됩니다 .
또 다른 예는 "run to line breakpoint
"입니다. 는IJavaRunToLineBreakpoint
특별한 기능이 더 이상 필요로 제거되지 않았습니다. 이제 Java 디버그 UI는 단순히 숨겨져 있고 지속되지 않으며 적중 횟수가 1 인 "줄 중단 점"을 생성합니다. 이것은 클라이언트에 빌딩 블록을 제공하는 예입니다.
비슷한 문제가 있었지만 수락 된 솔루션이 작동하지 않았습니다. Eclipse Android 개발을 수행 중이며 일부 중단 점을 설정하고 나중에 설정을 해제했습니다. 내가 그들을 비활성화했지만 Eclipse는 이러한 유령 중단 점에서 계속 실행을 중지했습니다. 나를위한 해결책은 중단 점 창을 여는 것입니다.
창>보기 표시> 기타 ...
디버그> 중단 점
그런 다음 중단 점을 마우스 오른쪽 단추로 클릭하고 "모두 제거"를 선택하십시오.
불행히도 모든 유효한 중단 점을 재설정해야하지만 이것은 저에게 효과적이며 앞으로의 많은 불안과 좌절을 예방했습니다.
다른 사람들을 안내하는 일부 사진 :
다른 해결책이 유용하지 않은 사람들을 위해 내 문제에 대한 개인적인 해결책을 찾았습니다. 작업 공간에 다른 프로젝트를 빌드하여 생성 된 .jar 라이브러리로 작업합니다. .java의 중단 점을 라이브러리 프로젝트에 설정하면 최종 프로젝트를 디버깅 할 때 중단 점이 트리거됩니다. 그러나 디버거가 실행을 일시 중지하면 자체 중단 점이있는 .class 파일이 표시 되므로 .java 파일에 설정된 중단 점은 여기에 표시되지 않습니다!
솔루션 : 중단 점을 제거하려면 라이브러리 프로젝트에서 중단 점을 .java 파일에서 제거해야합니다.
소스 파일에 존재하지 않는 중단 점에 대한 영구 마커가있는 문제가 발생했습니다. 프로젝트를 정리하고 전체 빌드를 수행하고 Eclipse를 다시 시작하려고했습니다. 아무것도 작동하지 않았습니다.
Eclipse 메타 데이터를 살펴보고 프로젝트 .markers 파일을 찾았습니다. 해당 파일을 삭제하면 마침내 문제가 해결되었습니다.
이 문제가있는 다른 사람은 작업 공간 디렉토리를 열고 .metadata / .plugins / org.eclipse.core.resources / .projects / your 프로젝트로 이동 한 다음 .markers 파일의 이름을 바꾸거나 제거합니다.
예를 들어 작업 영역 폴더가 ~ / workspace이고 프로젝트 이름이 Foo 인 경우 다음을 수행 할 수 있습니다.
$ mv ~/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers
이전 답변에서 해결책을 찾지 못한 사람들은 내 문제를 해결 한 것을 시도 할 수 있습니다. HAL9000 문제 / 해결책과 비슷하다고 생각합니다.
같은 이름을 가진 두 개의 클래스 (두 개의 다른 프로젝트에서)가있는 경우 하나의 중단 점을 다른 클래스에도 적용하십시오. 둘 다 "중단 점"창에 표시됩니다.
솔루션 : 클래스에서 사용하지 않는 동일한 이름의 중단 점을 제거하면 디버깅중인 클래스에서 중단 점이 제거됩니다.
'developer tip' 카테고리의 다른 글
EntityManager가 닫힙니다. (0) | 2020.10.26 |
---|---|
IB Designables : 자동 레이아웃 상태 업데이트 실패 : 경로에서 Designables를로드하지 못했습니다 (null). (0) | 2020.10.26 |
__str__ 및 __repr__의 목적은 무엇입니까? (0) | 2020.10.26 |
Cmake가 Boost를 찾지 못함 (0) | 2020.10.26 |
@ URL.Action () 내에서 자바 스크립트 변수에 액세스하는 방법 (0) | 2020.10.26 |