我写了一个非常简单的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主要
... ...
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
孩子们说话。将-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
问题内容: 每当我从表Y获得任何记录时,我都试图在表X上运行一条语句,无论如何,我只能使用MySQL来完成该操作吗? 像触发器一样? 问题答案: 简短的回答是第触发器触发与,或。 可能的解决方案。相当罕见的情况: 首先,在表X上编写一些执行所需操作的存储过程。 然后,限制所有用户仅使用这些存储过程,并且不允许他们直接在表X上使用。 然后,更改存储过程以也调用执行所需操作(或其他操作)的存储过程。
问题内容: 我正在尝试使用sigaction设置异常处理程序。对于第一个例外,它运作良好。但是在第一个异常之后不会调用sigaction处理程序,并且在第二个信号发生时程序会突然结束。 问题答案: 信号和异常互不相关。您正在使用的内容(从异步信号处理程序引发异常)只能在支持该功能的少数编译器之间移植,例如GCC和Intel C / C ++ with 。 就是说,您忘记做的是取消阻止信号:执行信号
也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?
我的java小程序分配有问题。出于某种我无法理解的原因,每当我选中复选框时,我的所有if语句都会立即触发。程序应该更新总价,并在每次按下方框时通知用户。我们必须使用复选框,而不是单选按钮或JCheckBox,并且程序必须编写为小程序。这里是我的代码链接。
我的Codename One应用程序有一个MapContainer,它显示一些标记。当用户点击一个标记时,应该显示一个新的表单,其中包含一些关于标记的细节。下面是我使用的代码:
在我的OS/400V6中。x系统我使用ADDPFTRG命令为物理文件(DB2表)创建了一个插入后触发器,每当我在RPG IV程序上执行写命令或从STRSQL生成INSERT语句时,该命令都会正确触发,但当我使用JT400(JTOpen)JDBC驱动程序从Java程序执行INSERT语句时,触发器不会触发。 在这两种情况下(从OS400和从Java),都会成功插入记录,但只有从OS400插入记录时才