Eclipse 디버거는 어떤 명백한 예외 없이 항상 ThreadPoolExecutor를 차단하며, 그 이유는?
나는 Eclipse에 대해 평소 하던 프로젝트를 하고 있어. 이건 Spring, Brievenote 등으로 만들어진 J2EE 애플리케이션이야.나는 이것을 위해 톰캣 7을 사용하고 있다(특별한 이유 없이, 나는 어떤 새로운 기능도 이용하지 않고, 단지 그것을 시도해 보고 싶었을 뿐이다.응용프로그램을 디버깅할 때마다 Eclipse 디버거가 중단점에 도달한 것처럼 튀어나오지만 사실은 그렇지 않은 자바 소스 파일에서 중단된다.ThreadPoolExecutor콘솔에 스택 추적은 없고 그냥 멈춰버린다.그런 다음 이력서를 클릭하면 계속 진행되며 앱이 완벽하게 작동한다.디버거 창에 표시되는 내용은 다음과 같다.
Daemon Thread ["http-bio-8080"-exec-2] (Suspended (exception RuntimeException))
ThreadPoolExecutor$Worker.run() line: 912
TaskThread(Thread).run() line: 619
나는 이것을 정말 설명할 수 없다. 왜냐하면 나는 사용하지 않기 때문이다.ThreadPoolExecutor조금도톰캣이나 겨울잠이나 봄나들이의 물건인가봐디버깅을 할 때는 항상 다시 시작해야 하기 때문에 매우 짜증나.
단서라도?
게시된 스택 추적은 런타임을 나타냄데몬 스레드에서 예외가 발생함이는 원래 개발자가 예외를 포착하여 처리하지 않는 한 일반적으로 런타임에 수행되지 않는다.
일반적으로 Eclipse의 디버거는 검색되지 않은 모든 예외에서 예외가 발생한 위치에서 실행을 일시 중단하도록 구성된다.예외는 나중에 처리되고 스택 프레임에서 아래로 내려갈 수 있으며 스레드가 종료되지 않을 수 있다는 점에 유의하십시오.이것은 관찰된 행동의 원인이 될 것이다.
Eclipse의 동작 구성은 간단하다.
Window > Preferences > Java > Debug로 이동하고 검색되지 않은 예외에 대해 Suspend 실행 선택을 취소하십시오.
좀 더 구체적인 해결책이 있어 이클립스가 무너지는 걸 막을 수 있어RuntimeException주어진 클래스에서만 던져진 s
- 디버깅 관점에서 새 예외 중단점 추가
- 해당 속성으로 이동
- 필터링으로 이동
- 선택한 위치로 제한에서 "클래스 추가"를 누르십시오.
- 추가하다
java.util.concurrent.ThreadPoolExecutor - 확인란 선택을 취소합니다, 이는 무시됨을 의미함
이 동작은 웹앱이 다시 로드될 때 Tomcat에 의해 촉발된다.그것은 (다른 것들 중) 그것의 실을 새로 고치도록 강요하는 톰캣 "메모리 누수 방지" 기능의 일부분이다.
이 문제는 현재 Tomcat: https://issues.apache.org/bugzilla/show_bug.cgi?id=56492의 버전 7.0.54 및 8.0.6에서 해결되었다.
서버 파일(jsp 또는 java)을 수정한 후 이런 일이 자주 발생한다는 것을 알게 되었고 STS는 애플리케이션을 다시 로드하는 데 어려움을 겪는다.
이것은 보통 변경사항을 동기화하기 위해 서버를 재시작하게 한다.
JRebel을 소개한 후 - 그것은 사라진 것 같다.그래서 디버그 모드에서 핫 스왑 코드를 할 때 STS에서 재현 가능한 문제라고 생각하고 싶다.
네이티브 핫스왑을 제거함으로써, ThreadPoolExecutor 클래스 내에 침입하는 문제를 제거한다.
'programing' 카테고리의 다른 글
| 왜 argc가 'int'('부호화되지 않은 int'가 아닌) (0) | 2022.05.22 |
|---|---|
| 파일을 문자열로 읽는 가장 간단한 방법은? (0) | 2022.05.22 |
| @click in select options - Vue.js 2 (0) | 2022.05.22 |
| Nuxt.js 구성 요소 내에서 어떤 레이아웃이 사용되고 있는지 확인하는 방법 (0) | 2022.05.22 |
| C에서 "정적"은 무엇을 의미하는가? (0) | 2022.05.22 |