Ответ 1
Низкий минимум
-Og
/-O0
-O0
в основном сообщает компилятору, что он не делает оптимизаций. Оптимизатор может удалить некоторые локальные переменные, объединить некоторые блоки кода и т.д., И в результате он может сделать отладку непредсказуемой. Цена для опции -O0
- очень медленное выполнение кода, но начиная с версии 4.8 Компиляторы GCC (включая Fortran) принимают новый уровень оптимизации -Og
:
-OG
Оптимизируйте опыт отладки. -Og позволяет оптимизировать, которые не мешают отладке. Это должен быть оптимальный уровень выбора для стандартного цикла редактирования-компиляции-отладки, предлагающий разумный уровень оптимизации при сохранении быстрой компиляции и хорошей отладочной работе.
Итак, если возможно, используйте -Og
, в противном случае используйте -O0
.
-g
Эта опция действительно делает возможной отладку, запрашивая компилятор для создания отладочной информации, предназначенной для использования интерактивным отладчиком (GDB).
Addititonal
Их много. Наиболее полезными, на мой взгляд, являются:
-Wall
, чтобы" включить все предупреждения о конструкциях, которые некоторые пользователи считают сомнительными, и которые легко избежать (или изменить для предотвращения предупреждение), даже в сочетании с макросами.
-Wextra
, чтобы "включить некоторые дополнительные предупреждающие флаги, которые не активированы -Wall."
-pedantic
, чтобы генерировать предупреждения о языковых функциях, которые поддерживаются gfortran, но не являются частью официального стандарта Fortran 95. Это может быть еще более "педантичным" и использовать флаг -std=f95
, чтобы предупреждения стали ошибками.
-fimplicit-none
, чтобы "указать, что не допускается неявное типирование, если оно не переопределено явными операторами IMPLICIT. Это эквивалент добавления неявного к началу каждой процедуры".
-fcheck=all
для "включения тестов времени выполнения", например, проверки границ массива.
-fbacktrace
, чтобы "указать, что при возникновении ошибки времени выполнения или испускании смертельного сигнала (ошибка сегментации, незаконное указание, шина ошибка или исключение с плавающей запятой), библиотека времени исполнения Fortran должна выводить обратную сторону ошибки."