- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得这是一个愚蠢的问题,但我发现有关该主题的信息为零(不在此处也不在任何地方),因此问题如下:
上下文(您可能已经知道):SIGFPE
异常(exception)和 si_code
field
在 POSIX/Linux 中,我们有一种特殊的信号,称为 SIGFPE
(尽管它的名字,它同时用于浮点和整数算术错误)。当我们为 SIGFPE
注册信号处理程序时使用 sigaction()
,我们的处理程序还会收到一个名为 si_code
的字段这解释了为什么特定的 SIGFPE
已引发异常。一种可能的 si_code
例如,值是 FPE_INTDIV
,你可以通过除以 int
来快速测试一下来自 0
.
问题:FPE_INTOVF
怎么样? ?
我的问题是关于一个特定的 si_code
,即 FPE_INTOVF
.此代码描述为 Value signalling integer overflow in case of SIGFPE signal
.
问题是我从来没有遇到过这个信号被引发的例子,也没有找到让操作系统引发这种信号的方法:当我在 C 中做整数溢出时,没有 SIGFPE
抛出异常。但是FPE_INTOVF
SIGFPE
的值是一种暗示,在整数溢出的情况下可能使主机抛出(就像整数除以零一样)。
问题:
是 FPE_INTOVF
无法使用?它只是一种信号类型的占位符,没有符合 POSIX 的操作系统曾经实现过吗?或者是否可以指示操作系统在整数溢出的情况下抛出这种信号?
我真的很想抓 FPE_INTOVF
来自 C 程序的信号,使用 sigaction()
.
P.S.:我认识到无符号整数溢出在技术上不是 C 中的错误(它在 C 中根本不存在,因为所有无符号整数算术都具有“包装”行为),但是 签名 整数溢出确实是未定义的行为,所以我希望 FPE_INTOVF
处理后者。
最佳答案
特尔;博士:SIGFPE FPE_INTOVF
类型的异常似乎只有在底层硬件支持它们时才会抛出。例如,在 Linux 上,这些是可能抛出 FPE_INTOVF
的拱门。 :alpha
, ia64
, m68k
, mips
, parisc
, s390
, 和 superh
.
不是我的问题的答案,但值得注意的是:
我的问题是关于 FPE_INTOVF
特别是,但如果您只是想检查整数溢出,那么值得注意的是,还有其他方法可以做到这一点:编译器特定的函数,如 __builtin_sadd_overflow()
( read more here ) 或编译器特定的标志,如 -ftrapv
在海湾合作委员会。另见 this和 this关于 SO 的相关问题。
学分
感谢用户 KamilCuk , Steve Summit和 Nate Eldredge感谢他们通过评论对这个答案做出的贡献。
P.S.: 以防其他人想添加关于 FPE_INTOVF
的其他信息,他们可能会发布此问题的另一个答案,或者他们可能会对此答案发表评论,我将编辑答案以添加其他信息。
关于c - 是否可以通过 SIGFPE FPE_INTOVF 在 C (POSIX/Linux) 中捕获整数溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69604998/
我有一个 qemu-kvm 进程,可疑地使用 SIGFPE 进行核心转储: Program terminated with signal 8, Arithmetic exception. #0 bd
我有一个可疑的 qemu-kvm 进程与 SIGFPE 核心转储: Program terminated with signal 8, Arithmetic exception. #0 bdrv_e
我在下面的程序中收到 SIGFPE 错误,并且无法想出删除它的方法。 #include unsigned int fact(unsigned long int n) { if (n =0&&
这是 spoj.com ( http://www.spoj.com/problems/PRIC/ ) 上的问题。我们必须检查序列中的数字是否为质数:ai=( a(i-1)+1234567890 ) m
在下面的代码中: #include #include #include #include #include using namespace std; void signal_callback_
根据 UNIX 高级编程文档,SIGFPE 信号终止程序并生成核心文件。 这是我的程序 #include #include #include #include static void sig_
我重复了两次相同的计算,但在一次中我得到了浮点异常,而在另一次中却没有。 #include #include #include using namespace std; int main(voi
看看这个 Unix C 程序: #include #include void handler(int signum) { printf("Handler signum=%d\n",sign
使用 gcc 4.7: $ gcc --version gcc (GCC) 4.7.0 20120505 (prerelease) 代码 list (test.c): #include struct
我有一个小程序执行浮点除以零,所以我期待 SIGFPE。 #include #include #include #include #include void signal_handler (
我在循环中发生了 SIGFPE。如果我设置断点或使用 stop、nopass 等处理 SIGFPE,我会在此行之后丢失帧变量。在断点的情况下,我需要首先通过执行 n N 到达那里。 ,其中 N是一个很
这来自 The GNU C Library Reference Manual int SIGFPE The SIGFPE signal reports a fatal arithmetic error
我有一个程序,它故意执行除以零(并将结果存储在 volatile 变量中),以便在某些情况下停止。但是,我希望能够禁用此停止,而不更改执行除以零的宏。 有什么办法可以忽略它吗? 我尝试过使用 #inc
为什么是 SIGFPE用于整数算术异常,例如除以零,而不是为整数算术异常创建单独的信号或通常首先为算术异常命名信号? 最佳答案 IEEE Std 1003.1 Standard将 SIGFPE 定义为
这个问题已经有答案了: Why is my power operator (^) not working? (11 个回答) 已关闭 7 年前。 我有以下代码,用于计算数字阶乘中尾随零的数量。该程序针
我正在尝试解决一个问题,即我必须找到正确句子的概率。我们假设一个句子中只有一个顺序是正确的。就一句“吃你饭”吧。我们可以将这句话重新排列成六种类型。例如:“给你吃米饭”,“吃米饭吧”,“你吃米饭”,“
我正试图查明 KDE 5.6 中的错误。无论我如何锁定,储物柜屏幕都会破裂。这是相关代码:https://github.com/KDE/kscreenlocker/blob/master/abstra
我正在尝试调试在我没有源代码的库中引发的 SIGFPE 信号。我正在使用 gdb 和 asm 布局来查看发生了什么。 这些是异常前的指令: 0xcd3fffa fstpl -0x68
我刚刚了解了 C/C++ 中的“信号”并进行了尝试。但是我在理解 SIGFPE 的逻辑时遇到了问题。 我写了一个小程序,它会遇到被零除的情况,如果发生这种情况,那么应该触发信号并执行信号处理程序。但是
我正在尝试清除浮点除以零标志以忽略该异常。我期待设置标志(我相信默认行为没有变化,并在下面注释掉),我的错误处理程序将触发。但是,_mm_div_ss 似乎没有引发 SIGFPE。有什么想法吗? #i
我是一名优秀的程序员,十分优秀!