トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Fortranデバッグ用オプション

最終更新時間:2010年07月01日 19時33分36秒

[Fortran]



コンパイル時のオプション

オプション一覧

  • 実行時に速度低下を招くものもあるので,デバッグが終わったらはずす。
  • できるだけ複数のコンパイラでチェックする
  gfortran g95 ifort pgf95
コンパイル時に全ての警告メッセージを有効 -Wall -Wall -warn all -Minform=inform
暗黙の型宣言を警告     -warn declarations -Mdclchk
標準外機能の利用を警告 -pedantic -std=f95 -pedantic -std=f95 -std -Mstandard
配列の領域外参照を検出 -fbounds-check -fbounds-check -CB(-check boundsに同じ) -C(-Mboundsに同じ)
初期化されていない変数を検出 -O -Wuninitialized -O2 -Wuninitialized -check uninit  
全ての実行時診断機能を有効     -check all  
浮動小数点例外発生時に異常終了 -ffpe-trap=invalid,zero,overflow   -fpe0 -Ktrap=fp
異常終了時にソースコードの行番号を表示 -fbacktrace(ve4.3以上) -ftrace=full -traceback -traceback(デフォルト)
デバッグデータの生成 -g(or -ggdb) -g -g -g
デバッガ gdb gdb idb pgdbg

オプション指定例

gfortran

gfortran -Wall -pedantic -std=f95 -fbounds-check -O -Wuninitialized -ffpe-trap=invalid,zero,overflow (-fbacktrace) [a.f90]
  • '-backtrace'が使えない場合はデバッガを使う

g95

g95 -Wall -pedantic -std=f95 -fbounds-check -O2 -Wuninitialized -ftrace=full [a.f90]

ifort

ifort -check all -warn all -std -gen_interfaces -fpe0 -ftrapuv -traceback [a.f90]
  • -gen_interfaces:subroutineやfunctionのINTERFACEブロックを作ってくれる -> 引数の不整合などのチェックがされるはず(同じソースファイルにあれば)
  • -ftrapuv:動的に割り当てる変数を0xccccccccで初期化するので,初期化漏れによるバグを洗い出すのに役立つ

pgi compiler

pgf95 -Minform=inform -Mdclchk -Mbounds -Mstandard -Ktrap=fp -traceback [a.f90]

デバッガの使用

  • コンパイル時に'-g'オプションをつける
  • シェル上で実行すると,異常終了時にcoreファイルができるので,'gdb(idb,pgdbg) a.out core'で止まった場所などがわかる
  • もしくはデバッガを起動して実行してみる(起動時に実行ファイル名を指定すればファイルを読み込むのは省略できる)
  • デバッガの終了は共通で'quit'

デバッガ上での実行の仕方

gfortran,g95

$ gdb
(gdb) exec-file a.out
(gdb) run a.out

ifort

$ idb
(idb) file a.out
(idb) run a.out

pgi fortran

$ pgdbg
pgdbg> debug a.out
pgdbg> run a.out

プロファイラの使用

  • サブルーチンの実行時間の内訳や呼び出し回数がわかる
  • コンパイル時(リンク時)に'-pg'オプションをつける(全コンパイラ共通)
  • 実行すると'gmon.out'が生成される
  • 'gprof a.out' を実行すると,実行した関数の一覧と関数の呼び出し回数が表示される