当我的程序运行完毕后,我收到以下消息:
注意:以下浮点异常是信令:IEEE_DEnorMAL
我不得不这样看 – 我明白我的一些浮点数需要存储为“非正规”,这是一种非常小数字的低精度形式(而不是将它们刷新为零).这些都来自程序中不稳定的空气动力学计算 – 我在进行计算时看到了这一点.这些非正规数量不太可能显着影响我的结果,但是为了尝试找出这种情况发生的位置/原因,我尝试使用以下错误选项进行编译:
gfortran -g -fbacktrace -ffpe-trap =无效,零,溢出,下溢,非正常-O3 -mcmodel = medium -o ../program.exe
该程序已编译,但在运行时它崩溃并返回:
Program received signal SIGFPE: floating-point exception - erroneous arithmetic operation.Backtrace for this error:#0 0x7F442F143E08#1 0x7F442F142F90#2 0x7F442EA8A4AF#3 0x4428CF in subroutine2_ at code.f:3601 (discriminator 3)#4 0x442C3F in subroutine1_ at code.f:3569#5 0x4489DA in code_ at code.f:428#6 0x42BdD1 in MAIN__ at main.f:235floating point exception (core dumped)
我可以将这些解释为一个调用层次结构,从6到3向后工作:
* 6.在“main.f”的第235行,出现了问题. [这是对“code.f”的调用]
* 5.在“code.f”的第428行,出现了问题. [这是对“code.f”中“subroutine1”的调用]
* 4.在“code.f”的第3569行,在“子程序1”中,出现了问题. [这是对“code.f”中“subroutine2”的调用]
* 3.在“code.f”的第3601行,在“子程序2”中,出现了问题. [这是条件声明]
if(windspd_2m.ge.5.0)然后……
因此DEnorMAL错误必须在“then” *** 作中发生(我没有包含该代码,因为(a)它涉及一系列长而复杂的依赖关系,并且(b)我可以解开数学错误,这是调试错误我正在努力).
但是对于上面的错误2,1,0 ……我不知道如何解释这些数字/字母串.我也不知道“鉴别器3”是什么意思.我用谷歌搜索了这些,但我发现的唯一资源解释了他们假设的知识水平高于我的水平.假设对Fortran,gcc或bash脚本的预先知识很少,那么有人可以帮我解释这些错误代码吗?
解决方法 前三个堆栈帧是由于在GFortran运行时库(libgfortran)中实现了回溯.回溯无法以符号方式解析动态库中的地址,因此您只能得到地址.如果要查看符号输出,可以在编译选项中添加“-static”.因此我的第一个猜测是错误在code.f:3601,并且由于5.0是一个常量,因此windspd_2m应该是非正规的.
总结以上是内存溢出为你收集整理的linux – 解释gfortran错误回溯全部内容,希望文章能够帮你解决linux – 解释gfortran错误回溯所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)