Squares サンプル・プログラムのデバッグ

次のプログラム (SQUARES) は Fortran Console アプリケーション・プロジェクト・タイプ を使用します。SQUARES プログラムは datafile.dat から書式付きデータを読み取り,計算結果を表示します。次に示すソース・コードでは,期待される結果は生成されません。

	PROGRAM SQUARES
	INTEGER INARR(10), OUTARR(10), I, K

!	データ・ファイルから入力配列を読み込みます。
	OPEN(UNIT=8, FILE='datafile.dat', STATUS='OLD')
	READ(8,*,END=5) N, (INARR(I), I=1,N)
 5	CLOSE (UNIT=8)

!	すべての非ゼロ要素の 2 乗を計算し,OUTARR に保存します。
	K = 0
	DO I = 1, N
!	  エラーがこのDOループにある?
	  IF (INARR(I) .NE. 0) THEN
	    OUTARR(K) = INARR(I)**2
	  ENDIF
	END DO

!	計算結果を出力し,プログラムを終了します。
	PRINT 20, N
 20	FORMAT (' Total number of elements read is', I4)
	PRINT 30, K
 30	FORMAT (' Number of nonzero elements is', I4)
	DO I = 1, K
	  PRINT 40, I, OUTARR(I)
 40	FORMAT(' Element', I4, ' has value', I6)
	END DO
	END PROGRAM SQUARES

書式付きファイル datafile.dat は,現時点では,次のものを含む 1 つの記録を含んでいます。

この書式付きデータ・ファイルの値を Microsoft ビジュアル開発環境で見るには,「File」メニューの「Open」を使用します。

配列境界検証なし (/check:nobounds オプション) で実行したときの出力を,次図に示します。

配列境界検証をオンにしてプログラムを実行すると,出力は次図のようになります。

このプログラムは,コマンド行からビルドすることも,ビジュアル開発環境からビルドすることもできます (「プログラムのデバッグ準備」を参照)。この例では,プロジェクト・ワークスペースがすでに存在していると仮定しています。

このプログラムをデバッグ

  1. 「Compaq Visual Fortran 6」プログラム・フォルダから,ビジュアル開発環境を起動します。

  2. 「File」メニューの「Open Workspace」をクリックします。

  3. ワークスペース・ウィンドウの「FileView」タブをクリックします。ワークスペース・ウィンドウが表示されない場合は,「View」メニューの「Workspace」をクリックします。

  4. squares.f90 を編集します。このためには,「FileView」タブでファイル名をダブルクリックします。次図の画面が表示されます。

    次のツールバーが表示されます。

    表示されるツールバーを変更するには,「Tools」メニューの「Customize」を選択し,「Toolbars」タブをクリックします。ツールバーを移動するには,そのアンカー (ツールバーの左にある二重縦線) をドラッグします。

  5. 最初の実行可能な行をクリックして,カーソル行を設定します。この例では,OPEN 文の行の先頭をクリックします。
    	OPEN(UNIT=8, FILE='datafile.dat', STATUS='OLD')
    
  6. 次図のように,「Build」ツールバーの「Set/Remove Breakpoint」ボタン (開いた手の絵) をクリックします。

    テキスト・エディタ/デバッガー・ウィンドウの左欄にある赤色の円は,ブレークポイントが設定されている場所を示しています。

  7. この例では,アプリケーションをすでにビルドしているものと仮定します (「プログラムのデバッグ準備」を参照)。

    次図に示すように,「Build」メニューの「Start Debug」の「Go」をクリックします。

  8. これでデバッガーが活動状態になりました。次図に示すように,現在の位置は,最初の実行可能行 (最初のブレークポイント) に黄色の矢印の印がつけられています。

    ビジュアル開発環境のタイトルバーに,「Build」メニューの代わりに「Debug」メニューが表示されます。また,それまで表示されていなかった場合,「Debug」ツールバーが表示されます。

    必要ならば,別のブレークポイントを設定し,ブレークポイントを追加または削除したい行にカーソルを置いて,次のいずれかの操作を行うことができます。

    ソース・コードの行を辿ります。これは,「Debug」メニューの「Step Over」(次図) か,「Debug」ツールバーの「Step Over」ボタンで行えます。

  9. 「Step Over」動作を繰り返し,プログラムを DO ループの中まで実行します。プログラムの終わりに達するまで「Step Over」動作を繰り返します。次図に示すように,カーソルを変数 K の上において,その値を表示させます (「Data Tips」と呼ばれます)。

    エラーは変数 K の値に関係しているようです!

  10. テキスト・エディタで,次のように K = K + 1 という行を追加します。

    !	すべての非ゼロ要素の 2 乗を計算し,OUTARR に保存します。
    	K = 0
    	DO I = 1, N
    	  IF (INARR(I) .NE. 0) THEN
    	    K = K + 1 ! この行を追加します。
    	    OUTARR(K) = INARR(I)**2
    	  ENDIF
    	END DO
    
  11. ソースを変更したので,アプリケーションを再ビルドする必要があります。

    出力画面を次図に示します。

  12. プログラムが生成する結果が正しくなったので,入力配列 INARR (ファイルから読み取られるもの) と,プログラムが計算する出力配列 OUTARR の値を確認することができます。テキスト・エディタ・ウィンドウでは,以前に設定したブレークポイントがそのまま残っています。

    「Build」メニューの「Start Debug」の「Go」をクリックします。

  13. プログラムの実行中に特定の変数値を見るためには,「Variables」または「Watch」ウィンドウを表示する必要があります。次図に示すように,「View」メニューの「Debug Windows」の「Variables Window」をクリックします。

  14. 次図に示すように,「Variables」ウィンドウで「Locals」タブをクリックして,局所変数値を表示します。

    「Locals」タブを使うと,配列を含めて,局所変数値を見ることができます。配列要素を見るには,プラス記号 (+) をクリックします。

    「Variables」ウィンドウは (「Context:」という単語の後に)「Context」メニューを表示します。「Context」メニューは例外をデバッグするときに役立ちます。

    「Locals」タブでは,モジュール変数やその他の局所変数ではない変数を表示することはできません。局所変数ではない変数を表示するには,次図のように「Watch」ウィンドウを表示します。

  15. この例ではモジュール変数や局所変数ではない変数は使用していませんが,変数名を「Watch」ウィンドウにドラッグすると,その変数を表示することができます。「Watch」ウィンドウでは式を表示することができます。

    次図のように,テキスト・エディタ・ウィンドウで変数名 INARR (添字構文なし) を選択し,ドラッグし,「Watch」ウィンドウにドロップします。

  16. また,OUTARR 配列名も「Watch」ウィンドウにドラッグします。OUTARR 変数名の左にあるプラス記号 (+) をクリックすると,その配列要素の値が表示されます。

  17. 「Debug」ツールバーの「Step Over」ボタンを使って,プログラムの行を実行します。プログラムの実行中も,スカラー変数値を「Data Tips」機能で表示し,「Watch」ウィンドウで配列 (またはその他の変数) の値を見ることができます。

    プログラムが実行を完了すると,画面は次図のようになります。

「Disassembly」ウィンドウ (ソース・コードと機械語コードを表示) が予期せず表示された場合,必要であれば,「Disassembly」ウィンドウ を閉じるために,「Debug」ツールバーの「Step Over」ボタンをクリック (または「Debug」メニューの「Step Out」を選択) します。

Visual Fortran プロフェッショナル版では,Array Viewer を使って複次元配列要素値を表示し,グラフにすることができます。

関連情報