42

これに答えるには経験が必要なので、どの教科書にも載っていないと思います。私は現在、コードをテスト/検証し、バグを探して製品状態にする段階にあり、エラーが発生すると、多くの人がダークサイドなどに苦しむことになります.

  • デバッグ目的で Fortran 用にプログラムをコンパイルするとき、どのような種類のフラグを設定しますか?

  • 本番システムにはどのようなフラグを設定していますか?

  • デプロイする前に何をしますか?

製品版はifortコンパイラとして使用しますが、私は でテストを行いgfortranます。私はそれを間違っていますか?

4

2 に答える 2

62

最低


-Og/-O0

-O0基本的に、最適化を行わないようにコンパイラに指示します。オプティマイザは、一部のローカル変数を削除したり、一部のコード ブロックをマージしたりできます。その結果、デバッグが予測不能になる可能性があります。-O0オプションの価格は非常に遅いコード実行ですが、バージョン 4.8 以降の GCC コンパイラ (Fortran コンパイラを含む) は、新しく導入された最適化レベルを受け入れます-Og

-Og

デバッグ エクスペリエンスを最適化します。-Og は、デバッグを妨げない最適化を有効にします。これは、標準の編集-コンパイル-デバッグ サイクルに最適な最適化レベルであり、高速なコンパイルと優れたデバッグ エクスペリエンスを維持しながら、妥当なレベルの最適化を提供します。

したがって、可能な場合は を使用し-Og、そうでない場合は を使用します-O0


-g

このオプションは、対話型デバッガー (GDB) で使用するためのデバッグ情報を生成するようコンパイラーに要求することで、実際にデバッグを可能にします。


追加

それらはたくさんあります。私の意見では、最も有用なものは次のとおりです。

-Wall「マクロと組み合わせても、一部のユーザーが疑わしいと見なし、簡単に回避 (または警告を回避するために変更) できる構造に関するすべての警告を有効にします。」

-Wextra「-Wall では有効にならないいくつかの追加の警告フラグを有効にする」。

-pedanticgfortran でサポートされているが、公式の Fortran 95 標準の一部ではない言語機能に関する警告を生成します。さらに「ペダンティック」になり、-std=f95フラグを使用して警告をエラーにすることもできます。

-fimplicit-none「明示的な IMPLICIT ステートメントによってオーバーライドされない限り、暗黙的な型付けが許可されないことを指定します。これは、すべてのプロシージャの先頭に暗黙的な none を追加することと同じです。」

-fcheck=allたとえば、配列境界チェックなどの「実行時テストを有効にする」。

-fbacktrace「ランタイム エラーが発生した場合、または致命的なシグナル (セグメンテーション違反、不正な命令、バス エラー、または浮動小数点例外) が発生した場合に、Fortran ランタイム ライブラリがエラーのバックトレースを出力する必要があることを指定します。」

于 2010-09-12T07:40:15.237 に答える
19

デバッグには次を使用します: -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. 境界チェックなどの実行時チェックにより、結果の実行可能ファイルの実行時間が長くなります。多くの場合、コストは驚くほど低いことがわかりましたが、高くなる可能性があります。したがって、本番用のコンパイルでは実行時チェックは行われません。

于 2013-08-09T00:44:45.287 に答える