为什么SIGFPE用于整数运算异常?
为什么SIGFPE用于整数算术异常,例如零除法,而不是为整数算术异常创建单独的信号,或者首先将信号命名为算术异常? 解决方案 错误的算术操作. 并没有真正提及浮点操作.尚未明确说明其背后的推理,但这是我对此的看法. x86 fpu可以同时使用诸如FIDIV>>>>>的说明同时在整数和浮点数据上运行,因此尚不清楚将浮动POITN数据除以整数零是否会产生浮动或整数点异常. 此外,高达80486(与ISO/ANSI C标准同年发布)X86 CPU完全没有浮点功能,Floing Point Point的处理器是一个单独的芯片.软件浮点仿真可以代替芯片,但它使用了CPU内置的Alu(整数算术单元),它会抛出整数例外.
6 2023-11-08
编程技术问答社区
如何产生总是触发信号SIGFPE(除以0)的代码?
我需要编码一个单位测试,该单位测试应始终触发由零信号(SIGFPE)划分的,因此我可以测试并比较/不使用我的信号捕获模块会发生什么. 我的Linux信号捕获/恢复模块已经开发出来,并且可以作为期望. 当我为模块编码单位测试时,我遇到了一个小麻烦. 这些是UT代码(通过GTEST): int do_div_by_0() { int j = 0; return 123 / j; /* During release-buidling, this div-op would be optimized out, although it would be not when debug-building! */ }; TEST_F( SignalsHandling_F, divByZeroDying ) { ASSERT_EXIT( { do_div_by_0(); // nev
10 2023-11-07
编程技术问答社区
我可以忽略除以0而产生的SIGFPE吗?
我有一个程序,该程序故意执行零差距(并将结果存储在挥发性变量中),以便在某些情况下停止.但是,我希望能够禁用此停止,而不会更改执行分区的宏. 有什么方法可以忽略它? 我尝试使用 #include ... int main(void) { signal(SIGFPE, SIG_IGN); ... } ,但它仍然死于消息"浮点异常(core丢弃)". 我实际上没有使用该值,因此我不在乎分配给变量的内容; 0,随机,未定义... 编辑:我知道这不是最便携的,而是用于在许多不同OS上运行的嵌入式设备.默认的停止动作是除以零;其他平台需要不同的技巧来迫使看门狗诱导的重新启动(例如无限制的无限环路).对于PC(Linux)测试环境,我想在不依赖诸如断言之类的事情的情况下禁用零的停顿. 解决方案 为什么您要故意执行零以零以停止?您不能exit(-1)还是等效的? 特别是如果您不需要鸿沟的结果0,这是没有意义的. 其他解
8 2023-09-03
编程技术问答社区
C/C++处理SIGFPE的方法是什么?
好吧,我已经搜索了有关Sigfpe的文章,然后我写了一些测试,但是这很奇怪.然后,我必须在这里发布它以寻求帮助. GCC/G ++或ISO C ++是否明确定义了如果除以零会发生什么? 1)我搜索了这篇文章: Zero by Zero by Zero不投掷Sigfpe 它隐藏输出是Inf 2)如果我将其重写为以下: void signal_handler (int signo) { if(signo == SIGFPE) { std::cout
6 2023-09-03
编程技术问答社区
Floating Point Exception Core Dump
我是Linux信号上的新手,请提供帮助. 在Linux 2.6 GCC中运行时,以下代码获得核心转储. $ ./a.out 浮点异常(核心倾倒) 问题: 1.由于安装了过程信号掩码,不应该阻止40 volatile int z = x/y;生成的" sigfpge"? 2.如果没有阻止它,则由于已经安装了信号处理程序,因此信号处理程序而不是核心转储捕获" sigfpe"吗? 3.如果我评论了40 volatile int z = x/y;行,并使用42 raise(SIGFPE);行,则一切正常. x/0和在这里提高sigfpe有什么区别? 这是代码: #include #include #include void sig_handler(int signum) { printf("sig_handler() received signa
28 2023-09-03
编程技术问答社区
从输入文件中读取实值时出现浮点异常
我尝试从Fortran中的输入文件中读取浮点数. 这样做,我使用此代码: ... INTEGER :: nf REAL :: re OPEN(newunit=nf, file='toto.txt') READ(unit=nf, fmt=*) re ... 使用toto.txt一个包含我的实际值的文本文件: 10.1001 ! this value is supposed to be read by the Fortran program 如果我这样的编译和执行,一切都很好. 但是,当我使用fpe>选项进行编译和执行时,我会遇到一些麻烦. 我在阅读线上有一个错误,看起来像: Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation Backtrace for this err
10 2023-06-14
编程技术问答社区
当产生NaN浮点数时,在不改变代码的情况下停止调试器
我阅读 this 和 thisthis .挑选是,如果通过包括fenv.h产生NAN并启用所有浮点异常,则可以扔一个sigfpe. 因此,代码更改表格 int main () { double dirty = 0.0; double nanvalue = 0.0/dirty; return 0; } to #include int main () { feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT); // Enable all floating point exceptions but FE_INEXACT double dirty = 0.0; double nanvalue = 0.0/dirty; return 0; } 这可以正常工作,但是您必须更改代码.我有一个问题,即在巨大的C和C ++代码库中,在某个地方生产了NAN,但我不知道
8 2023-04-20
编程技术问答社区
Floating point exception ( SIGFPE ) on 'int main(){ return(0); }'
我正在尝试为两个不同的Linux环境构建一个简单的C程序.在一个设备上,程序运行良好,在另一个设备上,程序生成浮点异常.该程序除了从MAIN返回0外什么都没有做任何事情,这使我相信与启动代码有些不相容,也许ABI? 该程序与GCC一起编译,并具有以下构建规范: 使用内置规格.目标:I386-REDHAT-LINUX配置: ../configure -prefix =/usr -mandir =/usr/share/man -infodir =/usr/share/info- enable-shared -enable-threads = posix -enable-checking = reparess-with-system-zlib-- eNable -_____________________________________________-disable-libunwind-exceptions-启用libgcj-multifile - enable-language
62 2023-03-07
编程技术问答社区
除以0不会抛出SIGFPE
我有一个小程序,执行浮点数为零,所以我希望sigfpe. #include #include #include #include #include void signal_handler (int signo) { if(signo == SIGFPE) { std::cout
62 2023-02-24
编程技术问答社区
信号SIGFPE问题
我是 Linux 信号的新手,请帮助.以下代码在 Linux 2.6 gcc 中运行时获取核心转储. $ ./a.out 浮点异常(核心转储) 问题: 1、既然装了进程信号掩码,那第40行(z=x/y)生成的“SIGFGE"不应该被屏蔽吗? 2.如果它没有被阻塞,既然已经安装了信号处理程序,那么信号处理程序不应该捕获“SIGFPE",而不是核心转储吗? 3. 如果我注释掉第 40 行 (z=x/y),并改用第 42 行 (raise(SIGFPE)),那么一切都按我的预期进行.这里的 x/0 和 raise SIGFPE 有什么区别? 代码如下: #include #include #include void sig_handler(int signum) { printf("sig_handler() received signal %d\
1400 2022-07-19
编程技术问答社区