linux – 解释gfortran错误回溯

linux – 解释gfortran错误回溯,第1张

概述我正在运行由其他人编写的Fortran 77程序.我在 Linux上使用gfortran编译器(v5.4.0)(Ubuntu v.16.04).我不是Fortran,gcc或bash脚本的有经验的用户,所以我在这里苦苦挣扎. 当我的程序运行完毕后,我收到以下消息: 注意:以下浮点异常是信令:IEEE_DENORMAL 我不得不这样看 – 我明白我的一些浮点数需要存储为“非正规”,这是一种非常小数字 我正在运行由其他人编写的Fortran 77程序.我在 Linux上使用gfortran编译器(v5.4.0)(Ubuntu v.16.04).我不是Fortran,gcc或bash脚本的有经验的用户,所以我在这里苦苦挣扎.

当我的程序运行完毕后,我收到以下消息:

注意:以下浮点异常是信令: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错误回溯所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1029700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存