Tag: segmentation fault

Java致命错误SIGSEGV

我从Java编译器收到一条我不明白的错误消息。 我已经在OSX 10.6,10.9和Ubuntu 14.04上使用Java 6和7测试了我的代码。当我使用Eclipse调试器或解释器(使用-Xint选项)运行时,一切运行正常。 否则,我收到以下消息: Java 1.6: Invalid memory access of location 0x8 rip=0x1024e9660 Java 1.7: # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x000000010f7a8262, pid=20344, tid=18179 # # JRE version: Java(TM) SE Runtime Environment (7.0_60-b19) (build 1.7.0_60-b19) # Java VM: Java HotSpot(TM) 64-Bit […]

如何在运行我的代码时调试JVM中发生的Segfaults?

我的Java应用程序已经开始定期崩溃,使用SIGSEGV和堆栈数据转储以及文本文件中的大量信息。 我在gdb中调试了C程序,并且已经从IDE调试了Java代码。 我不确定如何在正在运行的Java程序中处理类似C的崩溃。 我假设我不是在看这里的JVM错误。 其他Java程序运行得很好,Sun的JVM可能比我的代码更稳定。 但是,我不知道如何使用Java代码导致段错误。 肯定有足够的可用内存,当我上次检查分析器时,堆使用率约为50%,偶尔会出现80%左右的峰值。 我可以调查任何启动参数吗? 在接近像这样的bug时,什么是好的清单? 虽然我不能够可靠地再现事件,但它似乎也不是完全随机发生的,所以测试并非完全不可能。 ETA:一些血腥的细节 (我正在寻找一种通用方法,因为实际问题可能非常具体。但是,我已经收集了一些信息并且可能有一些价值。) 不久之前,升级我的CI服务器之后遇到了类似的问题(详情请见这里 ),但是这次修复(设置-XX:MaxPermSize )没有帮助。 进一步的调查显示,在崩溃日志文件中,标记为“当前线程”的线程永远不是我的,但是一个名为“VMThread”或一个名为“GCTaskThread” – 我是后者,它还标有注释“(已退出)”,如果是前者,则GCTaskThread不在列表中。 这让我想到问题可能是在GC操作结束时。

为什么java应用程序在gdb中崩溃但在现实生活中正常运行?

尝试从gdb运行java应用程序导致segfault,但单独运行app却没有。 这个应用程序是.JAR,它使用JOGL和一些内存映射来与GPU通信。 下面的Stacktrace暗示了某种内存访问问题,但我不明白它为什么会出现在GDB中而不是现实生活中。 是否有一些环境因素gdb需要知道才能正确执行? 这个问题在JVM OpenJDK 6和7以及Oracle JRE 7之间仍然存在。在启用segfault之前,oracle JRE在启动时运行得更远。 所有段错误在试验之间的发生和位置上都是一致的。 Segfault在GPU和驱动程序之间持续存在(!!):nvidia,radeon,fglrx current和fglrx beta(14.xx)。 GDB将成功附加到已经运行的程序实例,但是gDEBugger似乎不可能这样做,这最终需要工作。 没有意图使用gdb进行实际调试。 相反,我试图使用gDEBugger来执行OpenGL调试。 gDEBugger显然依赖于GDB作为其后端的一部分,因此如果GDB失败,gDEBugger也会失败。 这导致尝试单独运行gdb以隔离问题。 gDEBugger output: GDB String: [Thread debugging using libthread_db enabled] GDB String: Using host libthread_db library /lib/x86_64-linux-gnu/libthread_db.so.1 . Thread Created: 140737353893632 (LWP: 3265) Thread Created: 140737294624512 (LWP: 3266) Thread Created: 140737293571840 (LWP: 3267) Thread Created: 140737292519168 (LWP: […]