2012-11-07 2 views
0

Java 코드와 특정 원시 DLL의 상호 작용을 디버깅해야합니다. windbg + sosex에서 .NET- 네이티브 상호 작용을 디버깅 한 경험이 있습니다.자바 원시 상호 작용 디버깅

그러나 Java 호출 스택을 표시하는 windbg 확장이없는 것 같습니다.

또한, 나는 JDK 6

내가하지 (나는 방법을 알고 있었다하더라도) 소스 코드에서 JDK 6를 컴파일 필사적 그 어떤 것도 디버그 빌드를 찾을 수 없습니다.

제 궁금한 점은 일부 원시 DLL과 Java 코드의 상호 작용을 디버깅하거나 프로필을 작성하는 것입니다.

+0

기사는 3 년 전이지만 여기는 시작 장소입니다. https://www.ibm.com/developerworks/mydeveloperworks/ 블로그/MatthewWhite/entry/debugging_integrated_java_and_c_c_code? lang = en –

+0

jsadebugd (http://docs.oracle.com/javase/7/docs/technotes/tools/share/jsadebugd.html) 및 jstack http : //docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html 또는 VisualVM –

+0

Netbeans과 Visual Studio를 사용하는 JNI 애플리케이션을 2012 년 5 월에 디버깅하는 방법에 대한 기사가 있습니다. http : //www.codeproject.com/Articles/69965/Debugging-a-JNI-Application-using-Netbeans-and-Vis –

답변

0

jdb와 windbg의 조합을 사용하여이 작업을 수행했습니다. 네이티브 호출 직전과 직후에 jdb로 자바에서 bp를 설정하고 windbg로 네이티브 함수의 시작 부분에 bp를 설정하십시오. 디버거는 상대방을 알지도 못합니다. 자바 바이트 코드 프레임과 네이티브 프레임 모두로 스택 추적을 얻을 수는 없지만 네이티브 호출 전후에 자바 스택을 볼 수 있기 때문에 큰 문제는 아닙니다.

참고 : jvm (적어도 1.5 버전)은 기본 디버거에서 실행할 때 큰 문제가되는 일반적인 경우에 예외를 사용합니다. 다행히도 EIP는 거의 모두 동일하므로 다음과 같은 것을 사용하여 무시할 수 있습니다. .if (@eip == <addr>) {gn}

+0

감사합니다. 아주 간단한 조합처럼 보입니다. – mark