我想我在任何教科书中都找不到这个问题,因为回答这个问题需要经验。 我目前正处于测试/验证我的代码/寻找错误以使其进入生产状态的阶段,任何错误都会导致许多人遭受痛苦,例如黑暗面。
当您为 Fortran 编译程序以进行调试时,您会设置什么类型的标志?
您为生产系统设置了什么样的标志?
部署之前您会做什么?
生产版本使用 ifort
作为编译器,但我使用 gfortran
进行测试。我做错了吗?
最佳答案
最低限度
<小时/> -Og
/-O0
-O0
基本上告诉编译器不进行优化。优化器可以删除一些局部变量,合并一些代码块等,其结果是它可以使调试变得不可预测。 -O0
选项的代价是代码执行速度非常慢,但从 4.8 版本开始,GCC 编译器(包括 Fortran 编译器)接受新引入的优化级别 -Og
:
-Og
Optimize debugging experience. -Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience.
因此,如果可能,请使用 -Og
,否则使用 -O0
。
-g
此选项实际上通过请求编译器生成供交互式调试器 (GDB) 使用的调试信息来实现调试。
<小时/>附加
有很多。我认为最有用的是:
-Wall
“启用有关某些用户认为有问题的结构的所有警告,并且很容易避免(或修改以防止警告),即使与宏结合使用也是如此。”
-Wextra
“启用 -Wall 未启用的一些额外警告标志。”
-pedantic
生成有关 gfortran 支持但不属于官方 Fortran 95 标准的语言功能的警告。甚至可以更加“迂腐”并使用 -std=f95
将警告标记为错误。
-fimplicit-none
“指定不允许隐式类型,除非被显式 IMPLICIT 语句覆盖。这相当于在每个过程的开头添加隐式 none。”
-fcheck=all
“启用运行时测试”,例如数组边界检查。
-fbacktrace
“指定当遇到运行时错误或发出致命信号(段错误、非法指令、总线错误或浮点异常)时,Fortran 运行时库应输出错误的回溯。”
关于debugging - 您为 GFORTRAN 调试器/编译器设置哪些标志来捕获错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676322/