Fortran プログラミングガイド |
第 5 章
プログラムの解析とデバッグ
この章では、プログラムの解析とデバッグを容易にする Sun Fortran コンパイラの機能について説明します。
大域的なプログラムの検査 (
-Xlist
)
-Xlist
x オプションは、ソースプログラムに不整合がないか、実行時に発生しそうな問題がないかを解析します。コンパイラが行う解析は、大域的に、つまり副プログラム間で行われます。
-Xlists
は、境界整列のエラー、副プログラムの引数、共通ブロック、パラメータの数や型の対応のエラー、およびその他のさまざまな種別のエラーを報告します。
-Xlist
x はまた、詳細なソースコードのリストとクロスリファレンステーブルも作成します。
注 -f95
では、-xlist
サブオプションのすべてを使用できるわけではありません。
GPC の概要
大域的なプログラムの検査 (GPC) は、
-Xlist
x オプションで呼び出され、次のことを行います。
- 特に、別々にコンパイルされるルーチン間で、通常より厳重な Fortran の型検査の規則を適用する。
- 別のマシンや異なるオペレーティングシステムの間で、プログラムを移動するときに必要な移植上のいくつかの制約を適用する。
- 正当ではあっても無駄が多かったりエラーにつながりそうな構造を検出する。
- その他のバグやあいまいな箇所を指摘する。
さらに具体的には、大域的なチェック機能によって次のような問題が報告されます。
大域的なプログラム検査の起動方法
-Xlist
オプションをコマンド行に指定すると、コンパイラの大域的なプログラムアナライザが起動されます。以降の節では、-Xlist
x のサブオプションについて説明します。例 : 基本的な大域的なプログラム検査用に 3 つのファイルをコンパイルします。
demo%
f95 -Xlist any1.f any2.f any3.f
画面への出力
通常、
-Xlist
x によって生成される出力リストはファイルに書き込まれます。直接画面に表示するには、-Xlisto
を使用して、出力ファイルを/dev/tty
に書き込みます。
demo%
f77 -Xlisto /dev/tty any1.f
デフォルトの出力機能
-Xlist
オプションは、出力で利用できる機能を組み合わせたものです。他の-Xlist
オプションを指定していない場合は、デフォルトで次のことを行います。
- 出力リストのファイル名は、最初に現れた入力ソースまたはオブジェクトのファイルの名前で、接尾辞は
.lst
に置換される。- 行番号付きソースリスト
- ルーチン間の不整合に関するエラーメッセージ (リストの当該箇所に埋め込まれる)
- 識別子のクロスリファレンステーブル
- 1 ページ 66 行、1 行 79 カラムのページ割り
- コールグラフは生成しない。
include
ファイルは展開しない。ファイル形式
検査プロセスは、コンパイラコマンド行に指定されたすべてのファイル (接尾辞
.f、
の付くファイル) を認識します。
.f90、.f95、.for、.F、.F95、.o.o
ファイルは、サブルーチンと関数の名前など、大域的な名前に関する情報だけをプロセスに提供します。解析ファイル (
.fln
ファイル)
-Xlist
オプションでコンパイルされたプログラムには、自動的にその解析ファイルがバイナリファイル中に構築されます。それによって、ライブラリのプログラム間で大域的なプログラム検査を行うことができます。また、コンパイラは、
-Xlistfln
dir オプションが指定されている場合でも、個々のソースファイルの解析結果を.fln
接尾辞の付いたファイルに保存します。dir はこれらのファイルを受信するディレクトリを示します。
demo%f77 -Xlistfln/tmp *.f
-Xlist
と大域的なプログラム検査の例次の例で使用される
Repeat.f
ソースコードを示します。
例 :
-XlistE
を使用してエラーと警告を表示します。
同じプログラムを
-Xlist
でコンパイルすると、標準出力でクロスリファレンステーブルも生成されます。
f77 -Xlist Repeat.f
コンパイルによる出力(続き)
上記の例では、クロスリファレンステーブルの意味は次のとおりです。
ix
は 4 バイト整数です。pn1
はrepeat
ルーチンの 4 バイト実数です。rp1
はrepeat
ルーチンの 4 バイト実数です。行番号 2 で引数として使用されています。x
はsubr1
とx
ルーチンの 4 バイト実数です。ルーチン間の大域的な検査を行うサブオプション
大域的にクロスチェックする標準的なオプションは (サブオプションなしの)
-Xlist
です。このオプションは、それぞれが個別に指定できるサブオプションの組み合わせです。以降に、リスト、エラー、クロスリファレンステーブルを生成するオプションを説明します。複数のサブオプションをコマンド行に指定することもできます。
サブオプションの構文
-Xlist
とサブオプション
- 最も一般的なオプションは、
-Xlist
です (リスト、エラー、クロスリファレンステーブル)。- 特定の機能は、
-Xlistc、-XlistE、-XlistL、-XlistX
を組み合わせて使用することによって指定できます。- これら以外のオプションは、細部指定オプションです。
demo%
f77 -Xlistc -Xlist any.f
demo%
f77 -Xlistc any.f
次の表に、これらの基本的な
-Xlist
サブオプションだけで生成したレポートを示します。
表 5-1 Xlist の個別指定のサブオプション エラー、リスト、クロスリファレンス -Xlist
エラーのみ -Xlist
E
エラーとソースリストのみ -Xlist
L
エラーとクロスリファレンステーブルのみ -Xlist
X
エラーとコールグラフのみ -Xlist
c
-Xlist
サブオプションリファレンス
-Xlist
サブオプションについて、以下で説明します。サブオプションによっては、f77
だけでしか使用できません。
f77: -Xlistc
- コールグラフとルーチン間のエラーを表示
します。
-Xlistc
は単独ではリストまたはクロスリファレンスを表示しません。コールグラフは印字可能な文字を使用したツリー形式で生成されます。主プログラムから呼び出されないサブルーチンがあれば、複数のコールグラフが表示されます。各初期値設定プログラムは主プログラムとは切り離して別個に出力されます。
-XlistE
- ルーチン間のエラーを表示します。
-XlistE
は単独ではクロスルーチンエラーだけを表示し、リストまたはクロスリファレンスを表示しません。
-Xlisterr
[nnn] - nnn 番のエラーを抑制します。リストやクロスリファレンスから番号付きのエラーメッセージを抑制するときに使用します。
たとえば、-
Xlisterr338
とすると、338 番のエラーメッセージが抑制されます。nnn が指定されていない場合は、すべてのエラーメッセージが抑制されます。特定のエラーを追加して抑制するときは、このオプションを繰り返して指定します。
-Xlistf
- 高速に出力します。オブジェクトファイルを生成せずに、ソースファイルのリストとクロスチェックレポートを生成し、ソースを検証するときに
Xlistf
を使用します。このオプションなしのデフォルトでは、オブジェクトファイルは生成されます。
f77: -Xlistfln
dir- .fln
ファイルを dir ディレクトリに格納します。
-Xlistfln
を使用して、.fln
ソース解析ファイルを受け取るディレクトリを指定します。指定するディレクトリ (dir) はあらかじめ存在しなければなりません。デフォルトでは、ソース解析情報は.o
オブジェクトファイルに直接格納されます (.fln
ファイルは生成されない)
f77: -Xlisth
- エラーのため停止します。-
Xlisth
を使用すると、プログラムのクロスチェック中にエラーが検出された場合に、コンパイルが停止します。この場合の記録は、*.lst
ではなく標準出力stdout
にリダイレクトされます。
-XlistI - include
ファイルに対してもリストとクロスチェックを行います。
-XlistI
サブオプションだけを使用した場合、標準の-Xlist
出力 (行番号付きリスト、エラーメッセージ、クロスリファレンステーブル) とともに、include
ファイルも表示または走査されます。
- リスト - リストが抑制されていない場合は、
include
ファイルは所定の場所でリストされます。このため、インクルードされるたびに何回でもファイルがリストされることになります。リストされる内容は次のとおりです。- クロスリファレンステーブル - クロスリファレンステーブルが抑制されていない場合は、クロスリファレンステーブルの生成中に次のファイルが走査されます。
-XlistL
- リストとルーチン間のエラーを表示します。リストとクロスルーチンエラーのみを生成するときに
-XlistL
を使用します。このサブオプションは単独ではクロスリファレンステーブルを表示しません。デフォルトでは、リストとクロスリファレンステーブルの両方が表示されます。
-Xlistl
n - ページ割り付けのページ長を n 行に設定します。
ページの長さを
デフォルトのページサイズ以外の長さに設定するときに
-Xlistl
を使用します。 たとえば、-Xlistl45
とすると、1 ページの長さは 45 行になります。デフォルトは 66 行です。n=0
(-Xlistl0)
の場合、このオプションは、改ページをせずにリストとクロスリファレンステーブルを表示します。これは、画面上で表示するときに便利です。
-Xlisto
name --Xlist
の出力レポートファイルをリネーム
します。
-Xlisto
を使用して、生成されたレポート出力ファイルの名前を変更します。(o
と name の間には空白文字が必要です。)-Xlisto name
と指定すると、出力はname.list
ファイルに書き込まれます。画面に直接表示するときは
-Xlisto /dev/tty
コマンドを使用します。
f77: -Xlists
- 参照されていない識別子を抑制します。
include
ファイルで定義されているが、ソースファイルで参照されていない識別子を、クロスリファレンステーブルから抑制します。このサブオプションは、
-XlistI
が指定されている場合には効力がありません。デフォルトでは、
#include
またはINCLUDE
ファイルでの出現は表示されません。
f77: -Xlistv
n - 検査の厳密度を設定します。n には
1、2、3、4
のいずれかを設定します。デフォルトは2
です (-Xlistv2
)。
-Xlistv1
すべての名前についてクロスチェックした情報を行番号のない、簡潔な形式でのみ表示します。検査の厳密度としてはもっとも低いレベルで、構文エラーだけを検査します。
-Xlistv2
クロスチェックした情報に、注釈と行番号を付けて表示します。検査の厳密度としてはデフォルトのレベルで、構文エラーに加えて、引数の不整合なエラー、変数の使用上のエラーも検査します。
-Xlistv3
クロスチェックした情報に注釈と行番号を付けて表示し、共通ブロックのマップを表示します。検査の厳密度としては高いレベルで、別の副プログラムにある共通ブロックでデータ型を不正に使用したことによるエラーも検査します。
-Xlistv4
クロスチェックした情報に、注釈、行番号、共通ブロックのマップ、
EQUIVALENCE
ブロックのマップを付けて表示します。最高の検査の厳密度で、最大限のエラーを検出します。
f77
-Xlistw
[nnn] - 出力行の幅を n カラムに設定します。出力行の幅を設定するときに
-Xlistw
を使用します。たとえば、-Xlistw132
とすると、ページ幅は 132 カラムになります。デフォルトは 79 カラムです。
-Xlistwar
[nnn] - 検証レポートから nnn 番の警告を抑制します。出力レポートから特定の警告メッセージを抑制するときに
-Xlistwar
を使用します。nnn が指定されていない場合は、すべての警告メッセージが出力から抑制されます。たとえば、-Xlistwar338
とすると、338 番の警告メッセージが抑制されます。すべてではない複数の警告を対象にするときは、このオプションを繰り返して指定します。
-XlistX
-
クロスリファレンステーブルとルーチン間のエラーを表示します。
-XlistX
は、クロスリファレンステーブルとクロスルーチンエラーリストは生成しますが、ソースリストは生成しません。サブオプションを使用した例
例 :
-Xlistwar
nnn を使用して 2 つの警告を前出の例で抑制します。
特別なコンパイラオプション
デバッグに便利なコンパイルオプションもあります。これらのオプションによって、添字の検査、未宣言変数の印付け、コンパイルとリンク処理の経過の表示、ソフトウェアのバージョンの表示などを行います。
Solaris リンカーには、新しいリンカーデバッグ支援オプションがあります。
ld
(1)のマニュアルページを参照するか、
シェルプロンプトでコマンド
ld -Dhelp
を実行してオンラインマニュアルを表示してください。添字の境界 (
-C
)
-C
オプションは、境界を超えている配列の添字を検査します。
-C
を付けてコンパイルする場合は、コンパイラは、実行時に境界を超えている各配列の添字への参照を検査します。このオプションは、セグメンテーションフォルトの原因を見つけるときに役立ちます。
demo%cat indrange.f
REAL a(10,10)k = 11a(k,2) = 1.0ENDdemo%f77
-C -silent indrange.fdemo%a.out
ファイル indrange.f、3 行目、手続き MAIN で添字が範囲を越えています。配列 a の添字番号 1 の値は 11 です。異常終了demo%未宣言の変数型 (
-u
)
-u
オプションは、最初、すべての変数を未宣言として扱います。したがって、型宣言文やIMPLICIT
文で明示的に宣言されていない変数はすべてエラーとなります。-u
オプションは、名前の入力を間違えた変数の発見に役立ちます。-u
を設定すると、すべての変数は、明示的に宣言されるまで未宣言として扱われます。未宣言変数を使用している箇所については、エラーメッセージが表示されます。バージョンのチェック (
-V
)
-V
オプションは、コンパイラのさまざまなフェーズの名前とバージョン ID を表示できます。このオプションは、不明確なエラーメッセージの原因を追跡したり、コンパイラの失敗をレポートするのに役立ちます。また、インストールされたコンパイラパッチのレベルを検証するためにも使用できます。
dbx
と Sun WorkShop を使用した対話型デバッグSun WorkShop は、Fortran、C、C++ で書かれたアプリケーションを構築、ブラウズ、デバッグするための密接に統合された環境を提供します。
Sun WorkShop デバッグ機能は、
dbx
へのウィンドウベースのインタフェースです。dbx
自身は、対話型、行指向、ソースレベルの、シンボリックデバッガです。どちらを使用しても、プログラムがどこでクラッシュしたかを調べたり、実行コード中の変数や式の値を表示または追跡したり、ブレークポイントを設定したりできます。Sun WorkShop は、洗練されたグラフィカルな環境を、編集、構築、ソースコードバージョン制御用のツールが統合されたデバッグプロセスに追加します。これには、大きくて複雑なデータセットを表示して検査したり、結果のシミュレーションを行ったり、計算を対話的に制御したりするためのデータ視覚化機能が含まれます。
詳細は、『dbx コマンドによるデバッグ』、および
dbx
(1) のマニュアルページを参照してください。
dbx
プログラムは、イベント管理、プロセス制御、データ検査を提供します。プログラムの実行中になにが起こっているかを表示でき、次の作業を行うことができます。
- ルーチンを修正した後、他のルーチンをコンパイルし直さずに実行を継続できます。
- ウォッチポイントを設定して、指定した項目が変更された場合に停止または追跡できます。
- パフォーマンス調整のためのデータを収集できます。
- 変数、構造体、配列をグラフィックスを通して監視できます。
- 行単位、または関数単位でブレークポイント (プログラム中で停止する場所) を設定できます。
- 値を表示できます。つまり、停止して、変数、配列、構造体を表示または変更できます。
- ソース行またはアセンブリ行ごとにプログラムをステップ実行できます。
- プログラムの流れを追跡できます。つまり、行われた一連の呼び出しを表示できます。
- デバッグすべきプログラム中の手続きを呼び出すことができます。
- 関数呼び出しを通り過ぎたり、関数呼び出しに入り込み、そこで 1 行ずつ進んだり、関数呼び出しから抜けたりできます。
- 次の行、または他の行で、実行、停止、継続ができます。
- デバッグの実行のすべてまたは一部を保存したり再生したりできます。
- 呼び出しスタックを検査したり、コールスタックを上下に移動したりできます。
- 埋め込み Korn シェル中でスクリプトをプログラムできます。
- プログラムが
fork
(2) とexec
(2) を実行すると、それを追跡します。最適化されたプログラムをデバッグするには、
dbx fix
コマンドを使用して、デバッグしたいルーチンをコンパイルし直します。1. 適切な-O
n 最適化レベルでプログラムをコンパイルします。2.dbx
の制御下で実行します。3.fix -g any.f
を使用します。デバッグしたいルーチンには最適化を行いません。4. コンパイルしたルーチンでcontinue
を使用します。コマンド行に
-g
オプションがある場合、一部の最適化機能が制限されます。詳細は『dbx コマンドによるデバッグ』を参照してください。f77: コンパイラリスト診断を表示する
error
ユーティリティプログラムは、コンパイラ診断をソースコードとマージして表示するのに使用します。error
はコンパイラ診断をソースファイルの関連する行に挿入します。診断には、標準のコンパイラエラーと警告メッセージが含まれますが、-Xlist
のエラーと警告メッセージは含まれません。
注 - エラーユーティリティはユーザーのソースファイルを書き換えるので、ソースファイルが読み取り専用である場合や、読み取り専用のディレクトリにある場合は動作しません。
error
(1) は、Solaris オペレーティング環境の、「開発者」インストールの一部として含まれます。また、SUNWbtool
パッケージからもインストールできます。コンパイラ診断を表示する機能は Sun WorkShop にもあります。『Sun WorkShop の概要』を参照してください。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |