programing tip

Eclipse에서 여러 스레드 디버깅

itbloger 2020. 12. 6. 21:16
반응형

Eclipse에서 여러 스레드 디버깅


디버깅중인 메서드에서 새 스레드를 생성합니다. 부모 스레드가 아닌이 새 스레드의 실행을 디버깅해야합니다. 이클립스에서 어떻게 할 수 있습니까?


새 스레드의 "실행"메서드에 중단 점을 둡니다. 스레드가 시작되면 실행이 중지됩니다.


Shamit Verma의 답변 외에도 :

다중 스레드 Java 응용 프로그램 을 디버깅 할 때 중단 점이 설정된 스레드 만 일시 중단하는 표준 중단 점을 사용하지 않는 것이 좋습니다. 애플리케이션에서 표준 중단 점을 정의하면 관련 스레드 만 중단됩니다. 다른 스레드는 계속 실행됩니다. 어떤 이유로 이클립스 디버거에서 다른 스레드가 이미 시작된 경우 디버거가 중단 점을 건너 뛰도록합니다.

Java 디버깅을위한 솔루션 :

원하는 스레드에서 중단 점을 정의하고 (@ Run () 메서드가 예상합니다 ..) 중단 점-> 중단 점 속성을 마우스 오른쪽 버튼으로 클릭합니다.

중단 점 속성 대화 상자에서 "Suspend thread"대신 "Suspend VM"을 선택합니다.

이렇게하면 중단 점에 도달하는 경우 전체 VM이 일시 중단됩니다.

C / C ++ CDT에서 set scheduler-locking on을 사용하십시오 .

@Employed Russian가 answer-to-other-question 에서 말했듯 이 GDB 명령은 다음과 같습니다.

set scheduler-locking on 

다른 C / C ++ 스레드가 일시 중단 된 상태로 유지되는 동안 현재 스레드가 단계를 수행하도록합니다. 이 명령은 프로그램 실행을 일시 중지하고 '디버거 콘솔'퍼스펙티브를 열고 다음을 입력하여 Eclipse / CDT 디버그에서 실행할 수 있습니다. set scheduler-locking on 나중에 다음을 사용하여 정상으로 되돌릴 수 있습니다. set scheduler-locking off

단일 스레드를 중지하는 동안 다른 스레드를 실행할 수있는 스케줄러 잠금논스톱 모드 에 대한 자세한 내용은 GDB 문서를 참조하십시오 .


Erik Kaju의 답변 외에도. CDT를 디버깅하는 경우 (Java에도 적용 할 수 있지만 확실하지 않음)

  1. run () 메서드 (또는 동등한 메서드)에 중단 점을 둡니다. 또는 필수 스레드와 필요하지 않은 스레드 (필터에 의해 제거 될 스레드)가 모두 실행 중인지 확인하는 지점입니다.
  2. 디버그 세션을 시작합니다.
  3. 실행중인 중단 점이 적중되면 다른 중단 점으로 이동하여 비활성화 된 경우 해당 중단 점을 활성화 할 수 있습니다. 그런 다음 중단 점을 마우스 오른쪽 버튼으로 클릭-> 필터로 이동합니다. 이제 중단 점을 활성화 할 스레드를 선택하고 나머지 스레드의 선택을 취소 할 수 있습니다. 따라서이 중단 점은 해당 특정 스레드에 대해서만 적중됩니다.

단점은이 절차를 모든 디버그 세션에 대해 반복해야한다는 것입니다. 누구든지 그것에 대한 지름길을 제공 할 수 있다면 그것은 좋을 것입니다.


이클립스 디버그 창에서 스레드를 점프하여 원하는 작업자 스레드 번호에 도달하고 단계를 계속 진행할 수 있습니다 (F6). 여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/5375538/debugging-multiple-threads-in-eclipse

반응형