debugging - 您为 GFORTRAN 调试器/编译器设置哪些标志来捕获错误代码?

标签 debugging deployment fortran gfortran fortran90

我想我在任何教科书中都找不到这个问题,因为回答这个问题需要经验。 我目前正处于测试/验证我的代码/寻找错误以使其进入生产状态的阶段,任何错误都会导致许多人遭受痛苦,例如黑暗面。

  • 当您为 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/

相关文章:

javascript - 用 JavaScript 构建独立应用程序

java - 使用 MySQL 数据库创建 jar 到 exe

reactjs - React App 部署的页面看起来与本地主机不同

.net - 查找 .NET 多线程瓶颈

string - 如何在 F90 中编写 to_upper() 或 to_lower() 函数?

c++ - 将字符串数组从 Fortran 传递到 C/C++ DLL 并获取具有更改值的数组

c++ - Fortran 中 REAL(KIND=real_normal) 的 C 等效类型是什么?

eclipse - 如何使用 Eclipse + GlassFish 3 进行调试?

c - snprintf 在 Xcode 中使用 Guard Malloc 编译时会产生 EXC_BAD_ACCESS

c# - 获取 <compilation debug ="true"> 的 .NET Framework 设置