インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、Windows* 向けの Fortran アプリケーションにのみ適用されます。
次の例では、デバッグが必要な SQUARES という名前のプログラムを説明します。このプログラムのコンパイルおよびリンク時に、コンパイラーまたはリンカーは診断メッセージを出力しませんが、このプログラムの算術式には論理エラーが含まれています。
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
IF (INARR(I) .NE. 0) THEN
OUTARR(K) = INARR(I)**2
ENDIF
END DO
! 2 乗した値を出力して停止する
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(K)
40 FORMAT(' Element', I4, 'Has value',I6)
END DO
END PROGRAM SQUARES
この SQUARES プログラムは次の関数を実行します。
データファイルから一連の整数番号を読み取り、これらの番号を配列 INARR に保存します。datafile.dat ファイルには、整数値 4、3、2、5、および 2 を含む 1 つのレコードが含まれています。最初の番号は、この数値の後に続くデータ項目の数を示します。
各非ゼロ整数値の 2 乗の値を別の配列 OUTARR にコピーするループを実行します。
元のシーケンスに含まれている非ゼロ要素の数および各要素の 2 乗の値を出力します。
OUTARR の現在のインデックスを示す変数 K が 9 行目から 13 行目までのループでインクリメントされなかったため、論理エラーが発生します。K = K + 1 文を 11 行目の前に追加する必要があります。
この例では、(check:nobounds コマンドライン・オプションを設定して) プログラムが配列の上下限を確認せずに実行されていることを仮定します。配列の上下限を確認して実行した場合、ランタイム・エラー・メッセージが表示されます。
デバッグ例: 統合開発環境で Microsoft* 統合デバッガーを使用して、Windows* ベースのプログラムをデバッグする方法を示します。(「デバッグのためのプログラムの準備」および「デバッガーでのブレークポイントの使用」を参照してください。) この例では、ソリューションがすでに存在していると仮定しています。
このプログラムをデバッグする方法
Visual Studio* を起動します。
[ファイル] メニューから、[ソリューションを開く] を選択します。ファイルを含んだソリューションが開きます。
squares.f90 ファイルを編集します。[ソリューション エクスプローラー] でファイル名をダブルクリックします。次のような画面が表示されます。
[ビルド] ツールバー、[標準] ツールバーが表示されます。
表示するツールバーを変更するには、[表示] > [ツール バー] を選択します。[デバッグ] ツールバーを表示するには、[デバッグ] を選択します。
最初の実行可能な行をクリックして、カーソル位置を移動します。この例では、OPEN 文がある行の先頭をクリックします。
OPEN(UNIT=8, FILE='datafile.dat', STATUS='OLD')
その行の左側にあるマージンをクリックして、ブレークポイントを設定します。[テキスト エディター] ウィンドウまたは [デバッガー] ウィンドウの左側にあるマージンに表示される赤色の円は、ブレークポイントが設定された場所を示します。
この例では、アプリケーションがすでにビルドされているものと仮定しています (詳細は、「デバッグのためのプログラムの準備」を参照してください)。
[デバッグ] メニューから [デバッグの停止] を選択します。
デバッガーがアクティブになります。現在の位置が、最初の実行可能な行 (最初のブレークポイント) に黄色い矢印で示されます。
必要に応じて、他のブレークポイントも設定できます。ブレークポイントを追加する行にカーソルを移動し、右クリックして [ブレークポイント] > [ブレークポイントの挿入] を選択します。
ソースコード行をステップ実行します。これを行うには、[デバッグ] > [ステップ オーバー] を選択するか、[デバッグ] ツールバーの [ステップ オーバー] ボタンをクリックします。
このステップオーバー動作を繰り返し行い、DO ループ内のコードを実行し、プログラムの終わりに達するまで続けます。カーソルを変数 K の上に移動して、[データ ヒント] ボックスにその値を表示させます。
アプリケーションのエラーは、変数 K の値と関係があるようです。
[テキスト エディター] で、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
ソースを変更したので、アプリケーションをリビルドする必要があります。
[デバッグ] メニューから [デバッグの停止] を選択します。
[ビルド] メニューから [debugtest のビルド] を選択します。
[デバッグ] メニューから [デバッグの停止] を選択します。
次のような出力画面が表示されます。
改善された結果がプログラムによって生成されました。入力配列 INARR (ファイルから読み取られた配列) およびプログラムが計算する出力配列 OUTARR の値を確認することができます。[テキスト エディター] ウィンドウでは、設定したブレークポイントを解除せずにそのままの状態にしておきます。
[デバッグ] メニューから [デバッグの停止] を選択します。
プログラムの実行中に特定の変数の値を表示するには、[ローカル] ウィンドウを表示します。[デバッグ] メニューから、[ウィンドウ] > [ローカル] を選択します。
ローカル変数の値が、[ローカル] ウィンドウに表示されます。正符号をクリックして、配列の値を表示します。
[ローカル] ウィンドウでは、モジュール変数やその他のローカル以外の変数を表示することはできません。ローカル以外の変数を表示するには、[ウォッチ] ウィンドウを使用します。
この例では、モジュール変数やローカル以外の変数は使用されていませんが、変数名を [ウォッチ] ウィンドウにドラッグすることにより、そのような変数を表示することができます。[ウォッチ] ウィンドウでは、式を表示することもできます。
[テキスト エディター] ウィンドウで変数名 INARR を (添字構文なしで) 選択し、[ウォッチ] ウィンドウの [名前] カラムにドラッグします。
また、配列名 OUTARR も [ウォッチ] ウィンドウにドラッグします。変数名 OUTARR の左側にある正符号 (+) をクリックして、その配列要素の値を表示します。
[デバッグ] ツールバーの [ステップ オーバー] ボタンをクリックして、プログラムのソース行を実行します。プログラムの実行中に、スカラー変数の値をデータヒント機能で表示したり、配列 (またはその他の変数) の値を [ウォッチ] ウィンドウに表示できます。
意図しないのに [逆アセンブル] ウィンドウ (ソース・コード・シンボルおよび逆アセンブルされたコードが表示されるウィンドウ) が表示された場合、デバッガーツールバーの [ステップ アウト] ボタンをクリックする (または、[デバッグ] メニューから [ステップ アウト] を選択する) ことで、[逆アセンブル] ウィンドウを非表示にできます。