2.15 メモリトレーシング
メモリ割付けと解放をトレースする機能は-mtrace オプションを 指定することで利用できるようになります。 それぞれの割付けに関しアドレス、サイズ、行数を表示するか否か、トレース出力 全体を抑止するか否かについて制御することができます。 “paranoia”モードを指定した場合にはメモリアロケータ用のデータ構造が 保護される形となるため、ユーザプログラムによって誤って書き換えられるのを防 ぐことができます。
実行時の環境変数を用いることにより、あらかじめ設定されたトレーシングオプ ションを上書きでき、またトレース出力をどこに書き出すかも指定することがで きます。 これらはプログラムがある種のトレーシングオプションに基づき構築されている 場合にのみ操作できるようになります。 -mtrace=off を指定した場合にはトレーシングに対応可能なメ モリアロケータを備えたプログラムが生成されます。
-mtrace=off が指定されていなければ、-mtrace オプションのいずれかを使用することにより-mtrace=on が暗黙の うちに指定されたと同じことになります。
基本トレーシング機能により、それぞれのメモリ割付け、解放(自動変数、I/Oバッ ファ、コンパイラによる一時生成物に対する割付け、解放を含む)ごとにメッセージ が作成され、メモリトレーシングファイル(通常標準エラー)に書き出されます。 個々の割付けごとに番号が振られて行きます。最初の3項目は装置0(標準エラー)、 5(標準入力)、6(標準出力)に対するI/Oバッファとなります。
-mtrace= のすべてのサブオプションは実行時に
nAGFORTRAN_MTRACE_OPTIONS
環境変数により上書きすることができます。
具体的には環境変数にtrace_opt_list に応じた値(例えば
‘on,size
’)をセットします。
メモリトレーシングファイルを実行時に規定するには
環境変数nAGFORTRAN_MTRACE_FILE
を使用します。
環境変数nAGFORTRAN_MTRACE_OPTIONS
に割り付けられるトータルメモリ量の制限も含める事が可能です。
‘limit=
N’オプションは割り付けられる最大メモリ量をN MiB (メビバイト)に制限します。
この際プログラムはトレースオプションを指定して(最低限の指定は-mtrace=off)コンパイルされている必要があります。
メモリ制限を超えた場合には通常の“メモリ不足”と同じ状況になります。この状況は
ALLOCATE
分で発生する可能性があり、STAT=
節で捕捉可能です。
メモリ制限は自動変数及びコンパイラが一時的に生成する配列などを含んだトータルメモリ量に対して適用される事に注意して下さい。
-mtrace オプションはリンキングに際して指定する必要があり ますが、-gc とは整合性がありません。 行番号情報は-mtrace=line を指定してコンパイルされたファイ ルに対してのみ出力されます。
-mtrace からの出力をnagfmcheck
プログ
ラムによってチェックすることができます。それはフィルタとして機能するよう
設計されています。
メモリトレース出力らしからぬ行はすべて無視されることになります。
何かを2度解放しようとしたとか、割付けされていないものを解放しようとした、
割付けられたときとは異なるサイズで何かを解放しようとした等の異常を検知し
た場合、それは標準出力にエラーをレポートします。
明らかなメモリリークについても同様にレポートします(プログラムが異常終了
してしまった場合には余り役立ちませんが)。