Java에서 호출되는 C 코드를 디버깅하기 위해 gdb를 사용하고 있습니다. gdb를 실행중인 Java 프로세스에 연결하면 작동합니다. 약간. 골칫거리는 GDB가 SIGSEGV를 주기적으로보고하고 있으며 Java를 중단시키지 않는다는 것입니다. JVM이 내려 가서 오류에 대한 정보로 hs_err_pid를 생성 할 것으로 기대합니다. 나는 그 결함이 gdb (실제로는 아무 생각도 없음)에 의해 실제로 발생하고 실행중인 코드에서 실제로 발생하지 않는지 궁금하거나 자바가 SIGSEGV (어떤 생각이 들지도)에서 복구 할 수있는 경우도 있습니다.Java에서 SIGSEGV가 JVM을 크래시 할 수 있습니까?
편집 : 여기에 전체 GDB 출력은 다음과 같습니다 https://pastebin.com/Mk44kWXQ
예 :
Thread
52 "java" received signal SIGSEGV, Segmentation fault.
0x00007f9f3a93d4b1 in ??()
-exec-continue
[New Thread 0x7f9ea4b46700 (LWP 10135)]
[New Thread 0x7f9eb4079700 (LWP 10137)]
[Thread 0x7f9eac95e700 (LWP 10130) exited]
Thread
52 "java" received signal SIGSEGV, Segmentation fault.
0x00007f9f3a93d4b1 in ??()
-exec-continue
[Thread 0x7f9ea534c700 (LWP 9960) exited]
너무 모호합니다. gdb 세션의 전체 터미널 덤프를 포함한다면 더 많은 책임이있을 수 있습니다. – unwind
Java VM이 별도의 샌드 박스에서 C 코드를 실행하면 샌드 박스의 seg 오류로 인해 Java VM이 중단되지 않습니다. –
@PaulOgilvie - 그 일을 한 Java 구현에 대해 들어 본 적이 없습니다. 그것은 C와 자바 사이의 전환을 비싸게 만들 것이고, (상당한 정도까지) Java에서 C를 호출하는 목적을 무효로 만들 것입니다. –