gpt4 book ai didi

java - Java 中的 SIGSEGV 能否使 JVM 不崩溃?

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:53 29 4
gpt4 key购买 nike

我正在使用 gdb 调试从 Java 调用的 C 代码。我将 gdb 附加到正在运行的 Java 进程并且它可以工作。有些。奇怪的是 GDB 定期报告 SIGSEGV 并且它不会使 Java 崩溃。我希望 JVM 关闭并生成包含错误信息的 hs_err_pid。我想知道这些错误是否实际上是由 gdb 引起的(不知道如何)并且没有真正发生在运行代码中,或者在某些情况下 Java 是否可以从 SIGSEGV 中恢复(不知道如何)。

编辑:这是完整的 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]

最佳答案

Can a SIGSEGV in Java not crash the JVM?

当然,如果在执行 Java 代码(而非 native 代码)时发生 SIGSEGV,很可能是由于取消引用 Java null。这可以被捕获并变成 NullPointerException 并“抛出”。应用程序可以从中恢复;即通过“捕获”异常。

我认为 SIGSEGV 也可能由 Java 堆栈溢出触发,导致 Java 代码读取或写入堆栈的“红区”内存段中的地址。

无论如何,JVM 的 SIGSEGV 信号处理程序肯定会在某些情况下将 SIGSEGV 事件变成 Java 异常。如果那不可能发生,您只会遇到 JVM 硬崩溃;例如如果触发 SIGSEGV 的线程在事件发生时正在 native 库中执行代码。

关于java - Java 中的 SIGSEGV 能否使 JVM 不崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43345363/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com