Eclipse不断地在GDB中查找故障

Eclipse不断地在GDB中查找故障,eclipse,gdb,segmentation-fault,Eclipse,Gdb,Segmentation Fault,在弄清楚为什么Eclipse会在我身上崩溃时,我尝试启动Eclipse并将GDB附加到EclipseJava进程。然而,几乎在我连接GDB并告诉它继续的时候,就有一个不断的SEGFULTS流,几乎就在我继续之后。这是其中的一部分: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7f445879d700 (LWP 22968)] 0x00007f445739b3f4 in JVM_NewIns

在弄清楚为什么Eclipse会在我身上崩溃时,我尝试启动Eclipse并将GDB附加到EclipseJava进程。然而,几乎在我连接GDB并告诉它继续的时候,就有一个不断的SEGFULTS流,几乎就在我继续之后。这是其中的一部分:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f445879d700 (LWP 22968)]
0x00007f445739b3f4 in JVM_NewInstanceFromConstructor () from /usr/java/jdk1.7.0_45/jre/lib/amd64/server/libjvm.so
(gdb) bt
#0  0x00007f445739b3f4 in JVM_NewInstanceFromConstructor () from /usr/java/jdk1.7.0_45/jre/lib/amd64/server/libjvm.so
#1  0x00007f444d012698 in ?? ()
#2  0x00000000f6031d10 in ?? ()
#3  0x00000000f6031cf8 in ?? ()
#4  0x00007f44587999b0 in ?? ()
#5  0x0000000000000000 in ?? ()
(gdb) c
Continuing.
[Thread 0x7f43d2a0f700 (LWP 23085) exited]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f43d211c700 (LWP 23111)]
0x00007f44570c86a4 in ThreadInVMfromJava::~ThreadInVMfromJava() () from /usr/java/jdk1.7.0_45/jre/lib/amd64/server/libjvm.so
(gdb) 
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x00007f445736e6fc in jni_ReleasePrimitiveArrayCritical () from /usr/java/jdk1.7.0_45/jre/lib/amd64/server/libjvm.so
(gdb) 
Continuing.
[Thread 0x7f43d211c700 (LWP 23111) exited]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f43d280d700 (LWP 23087)]
0x00007f44570c86a4 in ThreadInVMfromJava::~ThreadInVMfromJava() () from /usr/java/jdk1.7.0_45/jre/lib/amd64/server/libjvm.so
(gdb) 
Continuing.
[New Thread 0x7f43d211c700 (LWP 23174)]
奇怪的是,当所有这些故障发生时,Eclipse似乎继续运行得很好。我在Eclipse的错误日志和dmesg中都没有看到任何segfaults。有没有人知道为什么会发生这种情况,为什么Eclipse会不顾SEGFULTS继续运行,以及它是否需要修复?我也很好奇,一个程序如何在收到segfault的情况下继续运行,尽管我假设一个信号处理程序可能正在消耗信号并阻止程序退出

奇怪的是,当所有这些故障发生时,Eclipse似乎继续运行得很好

这对于任何Java二进制文件(Eclipse就是其中一个例子)都是应该的

Java运行时相当复杂,使用了大量低级技巧。特别是,它将尝试机会主义地取消对指针的引用,如果该指针不正确,则获取
SIGSEGV
,在信号处理程序中重新调整内容,然后恢复执行


另请参见答案。

啊,我明白了,谢谢,我不知道为什么我在搜索时没有找到其他答案。是否可以过滤所有Java SIGSEGV以在我的JNI代码中找到真正的SIGSEGV?@BorisBrodski我知道没有简单的方法。我确实知道一种不那么容易的方法,但答案会很长。你介意再问一个问题吗?