摘要:我的系统上运行 Eclipse 的 Java VM 似乎正在运行,但内部却不断出现段错误。
重现步骤:
- 下载
eclipse-cpp-kepler-SR2-linux-gtk-x86_64.tar.gz
自http://www.eclipse.org/cdt/downloads.php。 - 将其提取为
/path/to/eclipse
。 - 跑步
gdb /path/to/eclipse/eclipse
。 - 这样做
set follow-fork child
的话,GDB 将跟踪实际的 Java 进程,而不仅仅是 Eclipse 启动器。 - 键入
run
以启动 Eclipse。您可能需要选择一个工作区目录。 - 您很快就会收到分段错误 (SIGSEGV)。输入
cont
GDB,您会收到另一个。cont
再次输入,您会收到另一个。如此反复。
再次,Eclipse 似乎正在运行,大概是因为它正在捕获信号并以某种方式进行恢复。
我的操作系统是 64 位 Red Hat Enterprise Linux 6.5,包含截至昨天(2014 年 5 月 22 日)的所有更新。Java RPM 是java-1.7.0-openjdk-1.7.0.55-2.4.7.1.el6_5.x86_64
,当前版本(版本 7 更新 55)来自http://java.com/产生相同的结果。
我很好奇,想知道其他人和其他版本的 Linux 上是否也会出现这种现象。更重要的是,我很好奇是否有人知道这是否是“正常的”。
(如果您想知道……尽管 Eclipse 似乎可以正常工作,但我担心一些真正的问题被隐藏了。我注意到这一点是因为我在使用 WebKit 的插件中偶尔会出现不完全可重现的段错误。我想我会尝试在 GDB 下观察段错误,但这变得很棘手,因为 JVM 从一开始就一遍又一遍地发生段错误,即使是在没有有问题的插件的全新安装上也是如此。)
答案1
JVM 在正常运行期间会使用大量信号,因此会出现 SIGSEGV。处理 NullPointerException 时会使用 SIGSEGV。
看本文了解更多详情。