tar*_*sch 38 deployment debugging fortran gfortran fortran90
我想我不会在任何教科书中找到它,因为回答这需要经验.我目前正处于测试/验证我的代码/狩猎漏洞以使其进入生产状态的阶段,任何错误都会导致许多人遭受痛苦,例如黑暗面.
在为Fortran编译程序以进行调试时,您设置了哪种标志?
你为生产系统设置了什么样的标志?
在部署之前你做了什么?
生产版本ifort用作编译器,但我用我的测试gfortran.我做错了吗?
Wil*_*cat 53
-Og/-O0-O0基本上告诉编译器不做任何优化.优化器可以删除一些局部变量,合并一些代码块等,结果它可以使调试变得不可预测.-O0选项的价格是非常慢的代码执行,但从版本4.8 GCC编译器(包括Fortran编译器)开始接受新引入的优化级别-Og:
-oG
优化调试体验.-Og启用不会干扰调试的优化.它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试体验.
所以,如果可能的话使用-Og,否则使用-O0.
-g此选项实际上通过请求编译器生成打算由交互式调试器(GDB)使用的调试信息来使调试成为可能.
有很多.我认为最有用的是:
-Wall "启用所有关于某些用户认为有问题的构造的警告,这些警告很容易避免(或修改以防止警告),即使与宏一起使用也是如此."
-Wextra "启用一些未被-Wall启用的额外警告标志."
-pedantic生成有关gfortran支持但不属于官方Fortran 95标准的语言功能的警告.它可能更"迂腐",并使用-std=f95标志警告成为错误.
-fimplicit-none "指定不允许隐式类型,除非被显式IMPLICIT语句覆盖.这相当于在每个过程的开头添加隐式none."
-fcheck=all "启用运行时测试",例如,数组边界检查.
-fbacktrace "指定当遇到运行时错误或发出致命信号时(分段错误,非法指令,总线错误或浮点异常),Fortran运行时库应该输出错误的回溯."
M. *_* B. 15
为了调试我使用:-O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused-parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace.对于尚未解释的,请查看gfortran手册. -fcheck=all包括-fcheck=bounds.
对于生产,我使用:-O3 -march=native -fimplicit-none -Wall -Wline-truncation -fwhole-file -std=f2008.运行时检查(如边界检查)会增加生成的可执行文件的执行时间.我发现成本往往低得惊人,但可能很高.因此,没有运行时检查生成的编译.