자바 호스트를 Gdal과 함께 사용합니다. JNI 바인딩 위에 구축 된 일부 서버 측 응용 프로그램이 있습니다. JNI 섹션에 오류가있는 경우 전체 JVM이 실패합니다.Java JNI 스택 폴 방지
C/C++ 라이브러리에 JVM 스택 폴을 유발할 수있는 치명적인 오류가 없다는 것을 테스트하는 가장 좋은 방법은 무엇입니까? 발생하는 오류를 깨끗하게 처리하는 가장 좋은 방법은 무엇입니까?
자바 호스트를 Gdal과 함께 사용합니다. JNI 바인딩 위에 구축 된 일부 서버 측 응용 프로그램이 있습니다. JNI 섹션에 오류가있는 경우 전체 JVM이 실패합니다.Java JNI 스택 폴 방지
C/C++ 라이브러리에 JVM 스택 폴을 유발할 수있는 치명적인 오류가 없다는 것을 테스트하는 가장 좋은 방법은 무엇입니까? 발생하는 오류를 깨끗하게 처리하는 가장 좋은 방법은 무엇입니까?
두 가지 마음에 와서 :
1). 별도의 프로세스 (RPC 기술을 사용하여 통신)로 C++ 코드를 실행할 가능성이 있다면 성능을 희생 시키더라도이 문제를 피할 수 있습니다.
2). C++/JNI 개발자의 자비하에 있습니다. 내가 격려 한 대부분의 문제는 JNI 계층의 "스킨"에 있습니다. 즉, JNI에 싸인 안정적인 기존 라이브러리가있었습니다. 실수로 기존 코드에 null 포인터를 전달하면 라이브러리가 불안해지며 응답으로 null을 확인하지 못하면 문제가 발생할 수 있습니다. 그래서 래퍼 레이어를 살균하는 데 많은 노력을 기울였습니다. 예기치 않은 결과가 발생할 가능성이있는 곳에서는 확인을 추가했습니다.
물론 전체 라이브러리가 새로운 것이라면 수명이 더 길어집니다. 결국에는 견고한 코드를 생성해야합니다.
GDAL은 비교적 안정적으로 사용되는 C/C++ 라이브러리입니다. JNI wrapper 섹션에는 더 많은 사랑이 필요합니다. 나는 "피부"를 지나가는 살균 물질을 들여다 볼 것이다. – whatnick
이러한 JVM 설정을 사용하도록 설정 했습니까?
-verbose:jni -Xcheck:jni
JNI 코드의 초기 개발에 매우 유용합니다.
-Xcheck:jni
옵션은 JNI 기능을 둘러싼 랩퍼 기능 세트를 활성화합니다. 래퍼 함수는 들어오는 매개 변수에 대한 검사를 수행합니다. 이러한 검사에는 다음이 포함됩니다.
Get<Type>Field
또는 Set<Type>Field
호출과 일치하는지 여부.
테스트는 버그가있는 경우에만 알려줍니다. –
아무 것도 없다면 알려주시겠습니까? : p – whatnick