Подтвердить что ты не робот

Какие флаги вы устанавливаете для вашего отладчика/компилятора GFORTRAN для обнаружения неисправного кода?

Я думаю, что не найду этого в любом учебнике, потому что ответ на это требует опыта. В настоящее время я нахожусь в стадии тестирования/проверки ошибок кода/охоты, чтобы получить его в состояние производства, и любые ошибки приведут к тому, что многие люди страдают, например. темная сторона.

  • Какие флаги вы устанавливаете при компиляции своей программы для Fortran для целей отладки?

  • Какие флаги вы устанавливаете для производственной системы?

  • Что вы делаете перед развертыванием?

Производственная версия использует ifort как компилятор, но я тестирую с помощью gfortran. Я делаю это неправильно?

4b9b3361

Ответ 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 должна выводить обратную сторону ошибки."

Ответ 2

Для отладки я использую: -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. Проверки времени выполнения, такие как проверка границ, увеличивают время выполнения результирующего исполняемого файла. Я обнаружил, что стоимость часто бывает на удивление низкой, но она может быть высокой. Следовательно, нет никаких проверок времени выполнения компиляции для производства.