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

次の例では、デバッグが必要な SQUARES という名前のプログラムを説明します。このプログラムはコンパイルされ、コンパイラーまたはリンカーのいずれからも診断メッセージを出力せずにリンクされたものです。ただし、このプログラムの算術式には、論理エラーが含まれています。

   PROGRAM SQUARES
      INTEGER INARR(10), OUTARR(10), I, K
! Read the input array from the data file.
      OPEN(UNIT=8, FILE='datafile.dat', STATUS='OLD')
      READ(8,*,END=5) N, (INARR(I), I=1,N)
  5   CLOSE (UNIT=8)
 
! Square all nonzero elements and store in OUTARR.
      K  = 0
      DO I = 1, N
        IF (INARR(I) .NE. 0) THEN
        OUTARR(K) = INARR(I)**2
        ENDIF
      END DO
 
! Print the squared output values. Then stop.
      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 プログラムは次の関数を実行します。

OUTARR の現在のインデックスを示す変数 K が 9 行目から 13 行目までのループでインクリメントされなかったため、論理エラーが発生します。K = K + 1 文を 11 行目の前に追加する必要があります。

この例では、(-check bounds コマンドライン・オプションまたは /check:nobounds コマンドライン・オプションを設定して) プログラムが配列の上下限を確認せずに実行されていることを仮定します。配列の上下限を確認して実行した場合、ランタイム・エラー・メッセージが表示されます。

デバッグ例: 統合開発環境で Microsoft* 統合デバッガーを使用して、Windows* ベースのプログラムをデバックする方法を示します。(「デバッグのためのプログラムの準備」および「デバッガーでのブレークポイントの使用」を参照してください。) この例では、ソリューションがすでに存在していると仮定しています。

このプログラムをデバッグする方法

  1. Microsoft* Visual Studio* のプログラムフォルダーから、[Visual Studio] を選択し、統合開発環境を開始します。

  2. [File (ファイル)] メニューから、[Open Solution (ソリューションを開く)] を選択します。ファイルを含んだソリューションが開きます。

  3. squares.f90 ファイルを編集するには、[Solution Explorer (ソリューション エクスプローラ)] でそのファイル名をダブルクリックします。次のような画面が表示されます。



    [Build (ビルド)] ツールバー、[Standard (標準)] ツールバーが表示されます。

  4. 表示するツールバーを変更するには、[View (表示)] > [Toolbars (ツール バー)] を選択します。[Debug (デバッグ)] ツールバーを表示するには、[Debug (デバッグ)] を選択します。

  5. 最初の実行可能な行をクリックして、カーソル位置を移動します。この例では、OPEN 文がある行の先頭をクリックします。

    OPEN(UNIT=8, FILE='datafile.dat', STATUS='OLD')
  6. その行の左側にあるマージンをクリックして、ブレークポイントを設定します。[Text Editor (テキスト エディタ)] ウィンドウまたは [Debugger (デバッガー)] ウィンドウの左側にあるマージンに表示される赤色の円は、ブレークポイントが設定された場所を示します。



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

    [Debug (デバッグ)] メニューで、[Start Debugging (デバッグ開始) (Visual Studio* 2005 および Visual Studio* 2008) を選択します。

    デバッガーがアクティブになります。現在の位置が、最初の実行可能な行 (最初のブレークポイント) に黄色い矢印で示されます。

  8. 必要に応じて、他のブレークポイントも設定できます。ブレークポイントを追加する行にカーソルを移動し、右クリックして [Breakpoint (ブレークポイント)] > [Insert Breakpoint (ブレークポイントの挿入)] (Visual Studio* 2005 および Visual Studio* 2008) を選択します。

  9. ソースコード行をステップ実行します。これを行うには、[Debug (デバッグ)] > [Step Over (ステップ オーバー)] を選択するか、[Debug (デバッグ)] ツールバーの [Step Over (ステップ オーバー)] ボタンをクリックします。

  10. このステップオーバー動作を繰り返し行い、DO ループ内のコードを実行し、プログラムの終わりに達するまで続けます。カーソルを変数 K の上に移動して、[データ ヒント] ボックスにその値を表示させます。



    アプリケーションのエラーは、変数 K の値と関係があるようです。

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

    ! Square all nonzero elements and store in OUTARR.
    K = 0
    DO I = 1, N
    IF (INARR(I) .NE. 0) THEN
    K = K + 1       ! add this line
    OUTARR(K) = INARR(I)**2
    ENDIF
    END DO
  12. ソースを変更したので、アプリケーションをリビルドする必要があります。

    • [Debug (デバッグ)] メニューから [Stop Debugging (デバッグの停止)] を選択します。

    • [Build (ビルド)] メニューから [Build debugtest (debugtest のビルド)] を選択します。

    • [Debug (デバッグ)] メニューで、[Start Debugging (デバッグ開始) (Visual Studio* 2005 および Visual Studio* 2008) を選択します。

    次のような出力画面が表示されます。


    プログラム修正後の出力
  13. 改善された結果がプログラムによって生成されました。入力配列 INARR (ファイルから読み取られた配列) およびプログラムが計算する出力配列 OUTARR の値を確認することができます。[Text Editor (テキスト エディタ)] ウィンドウでは、設定したブレークポイントを解除せずにそのままの状態にしておきます。

    [Debug (デバッグ)] メニューで、[Start Debugging (デバッグ開始) (Visual Studio* 2005 および Visual Studio* 2008) を選択します。

  14. プログラムの実行中に特定の変数の値を表示するには、[Locals (ローカル)] ウィンドウを表示します。[Debug (デバッグ)] メニューから [Windows (ウィンドウ)] > [Locals (ローカル)] を選択します。

  15. ローカル変数の値が、[Locals (ローカル)] ウィンドウに表示されます。正符号をクリックして、配列の値を表示します。



    [Locals (ローカル)] ウィンドウでは、モジュール変数やその他のローカル以外の変数を表示することはできません。ローカル以外の変数を表示するには、[Watch (ウォッチ)] ウィンドウを使用します。

  16. この例では、モジュール変数やローカル以外の変数は使用されていませんが、変数名を [Watch (ウォッチ)] ウィンドウにドラッグすることにより、そのような変数を表示することができます。[Watch (ウォッチ)] ウィンドウでは、式を表示することもできます。

    [Text Editor (テキスト エディタ)] ウィンドウで変数名 INARR を (添字構文なしで) 選択し、[Watch (ウォッチ)] ウィンドウの [Name (名前)] カラムにドラッグします。

  17. また、配列名 OUTARR も [Watch (ウォッチ)] ウィンドウにドラッグします。変数名 OUTARR の左側にある正符号 (+) をクリックして、その配列要素の値を表示します。

  18. [Debug (デバッグ)] ツールバーの [Step Over (ステップ オーバー)] ボタンをクリックして、プログラムのソース行を実行します。プログラムの実行中に、スカラー変数の値をデータヒント機能で表示したり、配列 (またはその他の変数) の値を [Watch (ウォッチ)] ウィンドウに表示できます。

意図しないのに [Disassembly (混合モード)] ウィンドウ (ソース・コード・シンボルおよび逆アセンブルされたコードが表示されるウィンドウ) が表示された場合、[Debug (デバッグ)] ツールバーの [Step Out (ステップ アウト)] ボタンをクリックする (または、[Debug (デバッグ)] メニューから [Step Out (ステップ アウト)] を選択する) ことで、[Disassembly (混合モード)] ウィンドウを非表示にできます。


このヘルプトピックについてのフィードバックを送信

© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。