IT TIP

Java 애플릿을 어떻게 디버깅합니까?

itqueen 2020. 12. 30. 20:00
반응형

Java 애플릿을 어떻게 디버깅합니까?


현재 내가 가지고있는 유일한 정보는 브라우저의 상태 표시 줄에있는 한 줄 오류 메시지입니다.

예를 들어 스택 추적을 어떻게 얻을 수 있는지 알고 있습니까?


이 기사는 약간 오래 되었지만 여전히 관련이 있습니다 ( "Java 플러그인에서 애플릿을 디버그하는 방법"섹션 포함).

편집 : 아마도 스택 추적을 얻는 더 좋은 방법은 Java 플러그인 콘솔 을 사용하는 것 입니다. 해당 창에서 "t"를 누르면 다음이 표시됩니다.

모든 기존 스레드 그룹을 인쇄합니다. 표시된 첫 번째 그룹은 그룹 기본입니다. ac는 활성 카운트를 나타냅니다. 스레드 그룹 및 하위 스레드 그룹의 총 활성 스레드 수입니다. agc는 활성 그룹 수를 나타냅니다. 스레드 그룹의 활성 자식 스레드 그룹 수입니다. pri는 우선 순위를 나타냅니다. 스레드 그룹의 우선 순위입니다. Group main 다음에 다른 스레드 그룹이 Group으로 표시됩니다. 여기서 name은 애플릿과 관련된 URL입니다. 스레드의 개별 목록은 스레드 이름, 스레드 우선 순위, 스레드가 살아있는 경우 살아 있거나 스레드가 파괴되는 과정에있는 경우 파괴되고 스레드가 데몬 스레드 인 경우 데몬을 보여줍니다.

해당 콘솔에서 가장 자주 사용하는 다른 명령은 0-5의 추적 수준입니다.

그러면 다음 섹션 추적 및 로깅에 설명 된대로 추적 레벨 옵션이 설정 됩니다.

해당 페이지에서 레벨이 다음과 같은 것을 볼 수 있습니다.

  • 0 — 꺼짐
  • 1 — 기본
  • 2 — 네트워크, 캐시 및 기본
  • 3 — 보안, 네트워크 및 기본
  • 4 — 확장, 보안, 네트워크 및 기본
  • 5 — LiveConnect, 확장, 보안, 네트워크, 임시 및 기본

이 도구들은 여러분이 세상에서 애플릿의 머리에 들어간 것을 밝혀 내려고 할 때 매우 유용 할 수 있습니다. 나는 그들이 나를 위해 일했다는 것을 알고 있습니다.


Java 6 업데이트 7부터는 Java 콘솔 및 애플릿 뷰어를 사용하는 것 외에도 JDK (JDK_HOME / bin / visualvm)와 함께 제공 되는 VisualVM사용할 수 있습니다 . 이를 통해 각 스레드의 스택 추적을보고 모든 개체 인스턴스를 볼 수도 있습니다.

AppletViewer는 매우 편리합니다. Eclipse에서 "Run as / Java Applet"을 수행하여 실행하거나 "Debug As / Java Applet"을 수행하여 애플릿 클래스를 디버깅 할 수 있습니다.

그러나 때로는 일부 보안 관련 사항을 디버깅하기 위해 브라우저 플러그인 환경이 appletviewer와 너무 다릅니다. 브라우저에서 애플릿을 효과적으로 디버그하기 위해 수행 할 수있는 작업은 다음과 같습니다.

1) 바이너리에 대한 디버깅 정보 얻기

JRE_HOME / lib에서 .jar 파일 백업

(다운로드 및) JRE와 동일한 버전의 JDK를 설치합니다.

.jar 파일을 JDK_HOME / jre / lib에서 JRE_HOME / lib로 복사합니다.

JDK 내부의 파일은 포함 된 디버깅 정보 (소스 코드 행 번호 정보, 변수 이름 등)로 컴파일되었으며 JRE 파일에는이 정보가 없습니다.

이것이 없으면 디버거의 핵심 클래스 코드에 의미있게 들어갈 수 없습니다.

2) Java 플러그인에 대한 디버깅 활성화

Java 제어판 / Java / Java 런타임 설정 /보기 / 사용자 / 런타임 매개 변수로 이동합니다.

그리고 디버깅을 활성화하는 옵션을 추가하십시오. 이 같은:

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n

흥미로운 옵션은 포트 (여기서 2502를 사용하면 거의 모든 사용 가능한 포트를 사용할 수 있습니다. 나중에 쓰기 만하면됩니다)와 일시 중지입니다. 애플릿 시작, 클래스 로딩 등을 디버그해야하는 경우 "y"로 설정합니다. . 이렇게하면 애플릿 페이지에 액세스 할 때 디버거가 연결될 때까지 JVM이 즉시 일시 중단되므로 브라우저가 정지 된 것처럼 보입니다.

3) 선호하는 IDE를 사용하여 Java 플러그인을 원격으로 디버그

예를 들어 Eclipse에서 Run / Debug Configurations ... / Remote Java Application을 선택합니다.

"새로 만들기"버튼을 클릭합니다.

연결 유형이 "Socket Attach"인지 확인하고, 브라우저가 로컬 인 경우 localhost를 호스트로 선택하고 이전에 선택한 포트 (예에서는 2502)를 선택합니다.

Java 코어 클래스 소스를 사용하려면 소스 탭의 JDK에 src.zip을 포함시켜야 할 수 있습니다.

구성을 저장하고 브라우저가 플러그인을 실행하면 (JVM이 일시 중지되었는지 여부에 관계없이) 원격 디버거를 실행하여 애플릿 소스가 포함 된 프로젝트가 열린 상태에서 플러그인 JVM에 연결합니다.


애플릿 뷰어 지원 옵션을 디버깅.


포착되지 않은 예외의 스택 추적이 콘솔에 표시됩니다. 이 기능은 Java 제어판 (고급> Java 콘솔> 콘솔 표시)에서 활성화 할 수 있으며 일부 브라우저에는이를 활성화하기위한 다양한 옵션 또는 플러그인이 있습니다.

실행중인 플러그인 프로세스에 디버거를 연결할 수 있습니다.

아마도 가장 좋은 방법은 전혀 디버그하지 않는 것입니다. 테스트를 작성하십시오. 애플릿으로 실행하는 것과 같이 불필요한 가정에 연결되지 않는 코드를 작성하십시오. 불행히도 대부분의 GUI / 애플릿 예제 코드는 매우 잘못 작성되었습니다.


포착되지 않은 예외가 콘솔로 전송됩니다. System.out을 사용하여 콘솔에 자신의 메시지를 쓸 수도 있습니다. 결과를 보려면 시스템 트레이에서 Java 아이콘을 마우스 오른쪽 버튼으로 클릭하고 콘솔을 열어 콘솔을 열어야합니다 (Microsoft VM의 경우 다름).

애플릿을 올바르게 디버그하려면 애플릿을 디버그하도록 Eclipse를 설정할 수 있습니다. 애플릿 소스 파일을 마우스 오른쪽 단추로 클릭하고 애플릿으로 디버그를 클릭하십시오. (애플릿에 대한 매개 변수가있는 경우이를 설정해야합니다.) 그런 다음 다른 Java 코드를 디버깅하는 것처럼 애플릿 코드를 단계별로 실행할 수 있습니다.


이클립스에서 연결하려고 할 때마다 원격 애플릿 디버깅을 수행하는 문제에 직면했습니다. 연결이 거부 오류를 던졌습니다. 제 jre 버전은 64 비트이고 이클립스 32 비트였습니다 .32 비트 jre로 교체했을 때 저에게 효과적이었습니다. 또한 32 비트 및 64 비트 jre 버전을 모두 설치 한 경우 IE는 기본적으로 애플릿에 64 비트 jre를 사용하고 chrome 및 FF는 32 비트 jre 버전을 사용할 수 있습니다.


나에게 이클립스에서 애플릿 디버깅을 얻는 가장 중요한 작업은 디버그 기호가있는 사용할 올바른 바이너리를 자바 제어판 (탭 자바)에서 설정하는 것입니다. jdk에 포함 된 JRE에만이 기호가 있습니다. 그래서 자바 제어판에서 애플릿을 디버깅하려면 자바 탭에서보기 버튼을 누르고 jdk 폴더 아래에서 올바른 jre를 찾은 다음, 예를 들어 "C : \ Programmi \ Java \ jdk1.7.0_03 \ jre"와 같이 확인 만 활성화합니다. 이 항목에 대해. 이것은 Sami Koivu가 말한 것을 수행하는 깨끗한 방법입니다.

참조 URL : https://stackoverflow.com/questions/868111/how-do-you-debug-java-applets

반응형