메소드 항목 디버깅을 사용할 때 디버그 된 프로그램이 그렇게 느려지는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/751105

  •  09-09-2019
  •  | 
  •  

문제

JDI 인터페이스를 사용하여 디버거를 생성하고 MethodEntRyRequests를 사용하여 디버그 된 프로그램 추적을 활성화하여 디버그 된 프로그램이 수십 계수로 속도가 느려집니다. 메인 스레드 용 필터를 설정하고 정책을 일시 중단 한 정책을 Snspend_event_thread. ClassFilter는 제한되어 있으며 수신 된 이벤트를 인쇄하면 수십 개 이상의 이벤트가 표시되지 않으므로 너무 많이받지 않아야합니다. 디버그 된 Java 프로그램과 함께 로컬로 디버깅하고 다음 종류의 명령 줄을 가지고 있습니다.

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

도움이 되었습니까?

해결책

짧은 대답은 메소드 항목이 설정 될 때 실행이 통역사를 통해 실행된다는 것입니다. 어쨌든이 주위에 있다고 생각하지 않습니다 ...

이것은 디버그 모드에서 실행되는 모든 코드의 경우에 사용되었지만 1.4에서 강화되었습니다... 이제 핫스팟은 메소드 항목 및 종료, 파수 점, 단일 스테핑 또는 브레이크 포인트가 포함 된 메소드를 제외하고 '풀 스펙'디버깅에 대해 작동합니다.

다른 팁

두 가지 이유 :

  1. 모든 메소드 항목에 검사를 추가해야합니다 (일부 방법 만 조정할 수있는 옵션이 없습니다).
  2. 방법 인라인이 불가능 해집니다 (소규모 방법은 10-100 배 더 느리게 실행됩니다)

프로파일 러 및 .NET 앱도 마찬가지입니다

나는 디버거가 모든 방법 호출에 대해 깨어나서 깨지기 위해 선택된 것과 일치하는지 확인해야한다고 가정합니다. 실행되기 전에 모든 방법 호출을 확인해야하기 때문에이 모든 검사를 수행 할 필요가없는 경우보다 상당히 느립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top