2016-06-15 17 views
2

私はgfortranでコンパイルされたFortranプログラムを-fcheck=boundsコンパイラオプションで使用しています。これにより、コードは "配列の範囲外"エラーを報告し、その後終了します。gfortranプログラムの境界外の配列のブレークポイントを設定する

gdbを使用してプログラムをデバッグして、エラーの原因を調べたいとします。残念ながらgdbでは、コードは境界外のエラーで終了するだけです。

アウトオブバウンドエラーが発生した場合にgdbに実行を停止するよう指示する方法はありますか?

break main.f90:24 

停止します。そして、あなたがデバッグしているファイル、あなたが実行を中断したいからコロンと行の数の名前がコマンドbreakを使用し、gdbにブレークポイントを設定するには

答えて

4

を使用できるようにし-gフラグを使用してプログラムをコンパイルする必要があります。その後、最初に、私はexitにブレークポイントを設定しましたが、これはうまくいきます。プログラムが停止すると、exitからエラーのポイントまでバックトレースすることができます。

バックトレースはまた、_gfortran_runtime_error_atという名前の関数を通るので、そこにブレークポイントを置くことがより多くなるかもしれません。これは私にとってはうまくいきます。

+0

ありがとう!それは完璧に働いた。 –

0

プログラムmainの行24の実行。次に、stepコマンドを使用して次の行にジャンプするなどの方法があります。この時点で、printを使用して、任意の変数の値をチェックすることができます。別のブレークポイントを定義した場合は、コマンドnextを使用して、次のブレークポイントに直接ジャンプすることができます。

あなたはTUがデバッグ情報を取得するために-gでコンパイルgdb

+0

これは本当に私の質問に答えるものではありません。私はコードの特定の行にブレークポイントを設定する方法を知っています。私は "配列の範囲外"エラーが検出されたときに中断する必要があります。このようなエラーが発生する前に、特定のコード行が何百万回も評価される可能性があるため、その行にブレークポイントを設定することは役に立ちません。 –

関連する問題