gpt4 book ai didi

java - 在 Java 中, "5/0"语句不会在我的 Linux 机器上触发 SIGFPE 信号,为什么?

转载 作者:IT王子 更新时间:2023-10-29 00:38:56 24 4
gpt4 key购买 nike

我写了一个非常简单的c程序:

#include<stdio.h>

int main(){
int a=2;
int b=0;
printf("%d\n", a/b);
}

然后用strace运行它:strace ./a.out 得到下面的输出(只粘贴尾部)

... ...
mprotect(0x600000, 4096, PROT_READ) = 0
mprotect(0x7f04c7fb8000, 4096, PROT_READ) = 0
munmap(0x7f04c7f96000, 127640) = 0
--- SIGFPE (Floating point exception) @ 0 (0) ---
+++ killed by SIGFPE +++
Floating point exception

输出符合我的预期,因为它被 SIGFPE 信号杀死了。

但是,用 Java 编写的同一个程序没有得到 SIGFPE 信号,有人知道 java 是如何处理“被零除”异常的吗?

public class Main {

public static void main(String[] args) {
int a = 2;
int b = 0;
System.out.println(a / b);
}
}

strace java -Xcomp Main

... ...
mprotect(0xf6949000, 8171520, PROT_READ|PROT_WRITE) = 0
mprotect(0xf6949000, 8171520, PROT_READ|PROT_EXEC) = 0
munmap(0xf774f000, 5727) = 0
mmap2(NULL, 331776, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0xfffffffff68d0000
mprotect(0xf68d0000, 4096, PROT_NONE) = 0
clone(child_stack=0xf6920494, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xf6920bd8, tls=0xf6920bd8, child_tidptr=0xff9c5520) = 958
futex(0xf6920bd8, FUTEX_WAIT, 958, NULL) = 0
exit_group(0)

最佳答案

在这里,它引发了一个 SIGFPE。

您忘记告诉 strace 跟随 child 。将 -f 选项添加到 strace,您应该会看到类似于以下内容的内容:

[pid  2304] read(3, "\312\376\272\276\0\0\0001\0n\n\0\23\0I\t\0\3\0J\7\0K\n\0L\0M\n\0N\0"..., 2369) = 2369
[pid 2304] --- SIGFPE (Floating point exception) @ 0 (0) ---
[pid 2304] rt_sigreturn(0x1c50800) = 5
[pid 2304] write(2, "Exception in thread \"main\" ", 27Exception in thread "main" ) = 27
[pid 2304] write(2, "java.lang.ArithmeticException: /"..., 40java.lang.ArithmeticException: / by zero) = 40
[pid 2304] write(2, "\n", 1

关于java - 在 Java 中, "5/0"语句不会在我的 Linux 机器上触发 SIGFPE 信号,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208546/

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