问题标签 [sigfpe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - 当我划分 1/1 x86_64bit 时获得 SIGFPE
我正在尝试构建从 Scheme 语言到 X86_64bit 的编译器,同时使用 gdb 进行调试,以查看我的程序在哪里崩溃,这是发生了什么:(我显示了相关的寄存器,你可以看到 rax=1, r15= 1,使我的程序崩溃的命令是 div r15)
我搜索了这个问题,但我只能看到除以零时给出 SIGFPE(显然不是这里的情况)
fortran - fortran 错误回溯导致 where 循环
我正在处理大型 fortran 代码,并且在使用快速选项进行编译之前(为了在大型数据库上执行测试),我通常使用“警告”选项进行编译,以检测和回溯所有问题。
因此,通过gfortran -fbacktrace -ffpe-trap=invalid,zero,overflow,underflow -Wall -fcheck=all -ftrapv -g2
编译,我收到以下错误:
并且代码 f_mod.f90:132 的部分包含一个 where 循环:
但我在这里没有看到任何错误。所有其他位置都是通往这部分的子程序的调用。当然,由于这是一个 SIGFPE 错误,所以我在编译时必须在执行时遇到问题gfortran -g1
。(我在 linux 上使用 gfortran 6.4.0)
此外,此错误会随着代码完全不同部分的修改而出现和消失。因此,问题来自这个 where 循环?或者来自其他地方并且回溯是错误的?如果是这种情况,我怎么能找到这个错误?
编辑:
因为,我无法在一个最小的例子中重现这个错误(他们正在工作),我认为问题出在其他地方。但是如何在大代码中找到问题呢?
android - 将 OpenMP 与 Android NDK 一起使用
在这个项目中,我有一个预编译库,它是使用“-fopenmp”标志编译的。构建整个项目是可行的,但是一旦使用 OpenMP,我就会收到以下错误:
A/libc:致命信号 8 (SIGFPE),代码 1,tid 32702 (ndroidapp) 中的故障地址 0x8a8fe7cd
只要通过 JNI 使用 OpenMP,就会发生这种情况。不幸的是,我找不到太多关于该错误的信息。如果我在没有 OpenMP 的情况下编译它,整个项目都可以正常工作。
这是 Gradle 的一部分:
这里有几行我用来编译库的makefile:
我能做些什么来解决这个问题?错误可能来自哪里?在这种情况下甚至可以使用 OpenMP 吗?
fortran - Fortran中加速度计算子程序模块中的浮点协处理器故障
对于我正在制作的分子动力学程序,我的两个模块遇到了一些问题。两者都发生在模块中的力计算中,我尝试更改所有值的精度。其中一个模块打印在下面。我在第 14 行得到错误,第一次力计算,我假设其余的也会有问题。有什么建议么?
c - 由于 SIGFPE、算术异常,除法运算导致执行错误
我为 MCU 编写了一个算法,该算法在对除法结果进行更多计算之前执行两个并行电阻的表达式。调试时这些值没有意义;它们太大了,float var 没有更新它们的初始值。
所以我去了https://www.onlinegdb.com/并在那里尝试了我的算法的一部分。执行代码时,它会在以下行启动一个非正常退出的算术异常:
首先我使用浮点数,但我认为异常可能是由溢出引起的,因此我使用 double 将变量存储做得更大,但出现了相同的异常。然后我尝试做同样的事情,但说:
并且执行成功了!
所以,我看到'1'运营商是原因。但我不明白为什么以及如何修复它(不使用math.h)。
代码是这样的:
我期待得到(调试):
- a = 1/(1/10 + 1/100) = 9.09
我认为这不是一个适合浮点数或双变量的大值。而不是这个,我得到了例外。
如何使用浮点数/双精度值和 int 值以避免 1/(较小的值)时出现异常?
c - -2147483648 % -1 导致浮点异常
例如:
(程序将这些值作为命令行参数,因为当硬编码时,我认为在编译时-2147483648 % -1
会被替换)0
-2147483648
分别使用和-1
作为第一个和第二个参数运行这个简单的程序会引发一个 SIGFPE。为什么会这样?还有其他类似的特殊情况吗?我怎样才能避免它?
谢谢!
c - 为什么当 INT_MIN 除以 -1 时使用 SIGFPE
这是一个简单的代码,如下所示:
编译后运行代码时,会出现一个 SIGFPE:
我的系统信息:
内核:4.19.0-5-amd64
CPU:Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
gcc 版本 8.3.0
我打算看到除法的签名 int 溢出。但是我对信号 FPE 感到非常困惑,因为没有计算浮点数。
c - 不发生被零除时如何调试 sigfpe
我正在尝试O0 -ggdb3
在sw64上编译 ruby ---- 一个类似于alpha的拱门,但遇到了一个奇怪的 SIGFPE 错误:
IIUC,来自 gdb 的回溯告诉我第 1 帧distance_multiply
是 sigfpe 的根本原因。
下面是定义distance_multiply
可以看到,如果 m 为零,则直接返回,所以devided-by-zero
sigfpe 永远不会发生。我还尝试在以下内容d
的m
帮助下转储值printf
:
输出:
从日志中我们可以看到,最后的日志总是:
d = 1,m = 1,ONIG_INFINITE_DISTANCE = -1
并且d < ONIG_INFINITE_DISTANCE / m
部分未打印,因为它已经被困在 sigfpe 中。奇怪的是,一些以前的日志也打印出来了d = 1, m = 1, ONIG_INFINITE_DISTANCE = -1
,这意味着这些情况下不会出现whend = 1
和sigfpe 。m = 1
可能会发生什么?我已经没有想法了。在这里可以拆卸帮助吗?
编辑:
抱歉缺少宏定义:
c - SIGFPE 尝试将端口连接到会议
随叫随到pjmedia_conf_add_port
_fatal error: unexpected signal during runtime execution
[signal SIGFPE: floating-point exception code=0x1 addr=0x7f466bd37f32 pc=0x7f466bd37f32]
当我尝试将采样率设置为高于 16kHz 和/或超过 1 个通道时,就会发生这种情况。
我需要使用具有 48kHz 采样率和 2 个通道的回调从呼叫中发送/接收 PCM 数据。
我究竟做错了什么?GDB 显示:
unix - 为什么 SIGFPE 用于整数算术异常?
为什么要SIGFPE
用于整数算术异常,例如除以零,而不是为整数算术异常创建单独的信号或首先为算术异常命名信号?