2012-05-22 3 views
0

팀 구성원의 JNI 문제를 디버깅해야합니다. 문제는 JNI를 사용하여 USB로 연결된 하드웨어를 인터페이싱하는 Java 응용 프로그램에 있습니다. 그는 C++ dll로 구현 된 JNI 기능이 Java 응용 프로그램에서 호출되지 않는다고 언급했습니다. 또한 그는 구체적으로 그것이 내가 의심할만한 최초의 링크 오류 오류가 아니라고 언급했다.JNI 함수가 호출되지 않습니다.

이상한 점은 Java App이 개발 시스템에서 제대로 작동하고 JNI 호출이 제대로 이루어지고 있다는 것입니다. 그러나 QA 팀의 대상 컴퓨터에서 Java 응용 프로그램이 작동하지 않는 것 같습니다.

DLL (32 비트)은 VS2010을 사용하여 생성되었으며 대상 컴퓨터는 WinXP/Win 7 32 비트 시스템이었습니다. DLL이 개발 시스템에서 인식되었으므로 DLL 메소드 서명 문제를 배제 할 것입니다. 언급했듯이, 그것은 링크 문제가 아니 었습니다.

JNI 메소드의 문제가 전혀 호출되지 않을 수 있습니까? 이것이 재배포 가능 항목에 문제가 될 수 있습니까? 디버깅 (JVM 옵션 사용) 및 문제 확인 방법

+0

'불리지 않는다'는 것을 의미합니까? – bmargulies

+0

DLL이 CRT에 정적으로 링크되어 있다고 가정하면 대상 시스템에 올바른 CRT 재배포 프로그램이 설치되어 있습니까? – ildjarn

+0

앱에 하드웨어를 초기화하는 컨트롤이 있으며 JNI init()을 호출해야합니다. 하드웨어가 초기화되지 않아 init()이 호출되지 않았 음을 알았습니다. 이것을 확인하는 방법? – Mano

답변

0

표준 디버깅 절차 : 자바

  • 실행에

    1. 설정된 중단 점은
    2. 자바 실행 파일 (비주얼 스튜디오 프로세스 ID에 의해 연결) JNI에서
    3. 설정된 중단 점에 디버거를 연결 브레이크 포인트입니다.
    4. Java 프로그램을 계속하십시오.
  • +0

    이것은 dev 시스템의 옵션 일 수 있지만 원격 QA 시스템에서는 사용할 수 없습니다. 대. JVN 커맨드 라인 옵션을 사용하여 JNI 호출을 추적 할 수 있습니까? – Mano

    +0

    아니요. Java는 자체적으로 JNI 호출이 많아지기 때문에 java -verbose : jni는 호출 수준 추적이 아닙니다. 그것은 여전히 ​​당신에게 뭔가를 말할지도 모릅니다. – bmargulies

    관련 문제