ヒューリンクステクニカルサポート
Absoft Pro Fortran Getting Started Absoft 製品ページ
更新日: 14/03/28

2. Fx3 を使ったデバッグについて

このセクションでは、プログラム初心者を対象に、プログラムのシングルステップ実行やブレークポイントの使用といったデバッグの基本的なコンセプトを紹介します。また、プログラム内に潜む問題の特定方法と、デバッグ作業を最大限に活用する方法も紹介いたします。

 

まずはじめに

このセクションに入る前に、前のセクション「デバッグを始めるまえに」に記載された内容を理解しておいてください。そこには、プログラムのコンパイルとリンク方法、および、デバッグ作業の開始方法が記載されています。

Fx3 を起動すると、下図のようなソースコードウィンドウが表示されたデバッグ作業用のアプリケーションが開きます。

Source code ウィンドウ

ウィンドウの左側にはソースファイルに記述されたコメント、宣言、実行コードそれぞれの各行番号が表示されています。プログラムが現在停止している行は、緑色のポインタでマークされています。ウィンドウの行番号エリアでマウスを右クリックするとブレイクポイントをセットしたり解除することができます。詳しくは、後述の「ブレイクポイントの使用」で説明します。

 

シングルステップ実行

シングルステップ実行とは、プログラムのある行を一行だけ実行し、次の行に移る前に実行を停止することです。プログラムの実行命令が一行に複数ある場合は、それらは一括して実行されます。実行命令が複数行にわたって記述されている場合は、それらはひとつのまとまりとみなされ、最終行まで進んだ後に実行が停止します。

一行にサブルーチンの呼び出しや関数の引用がある場合は、プロシージャに従ってその処理を進めるか、あるいは、それを単一の命令文とみなすかのいずれかを選択することができます。プロシージャに問題がないことがはっきりしている場合は、呼び出される関数をステップオーバーし、その命令文全体をひとつのまとまりとみなします。反対に、問題があると疑問に思った場合は、そのルーチーンにステップインし、実行の流れを順番にたどっていきます。途中で気が変わって、プロシージャの残りの命令文をすべて自動的に実行し、プロシージャの呼び出しに戻りたい場合は、Debug メニューの Return コマンドを使います。

 

ブレイクポイントの使用

プログラムが長くなるとシングルステップで実行するのが大変になります。プログラムにループが多くあったり、ループが何度も繰り返される場合はなおさらです。そこで何が起こっているかを詳しく調べたいと思う点に達するまでは、プログラムを普通に実行させた方が遥かに効率的です。そこで登場するのがブレイクポイントです。ブレイクポイントは、ユーザーが実行を停止させるために設定するプログラム内の位置です。プログラムの問題と思われる箇所にブレイクポイントを設定したら、プログラムを普通に実行します。プログラムがブレイクポイントにたどりついて停止したら、デバッガのフル機能を使ってそこを調べます。

Fx3 でブレイクポイントを指定するのはとても簡単です。実行可能な命令文の行番号にマウスを合わせてボタンをクリックするだけです。

ブレイクポイントの設定(赤印の部分)

ブレイクポイントを解除する場合も、まったく同じ操作を繰り返します。ブレイクポイントを設定した行番号にマウスを置き、そこをクリックするだけでブレイクポイントの印が無くなります。

プログラム内に設置されたすべてのブレイクポイントの位置は、下図の Breakpoints ウィンドウを開いて確認することができます。

最初にある Number フィールドには、ブレークポイントの ID 番号が表示されます。ID は次に示すブレイクポイントの状態をセットするのに使用します。Line Number と File フィールドには、ブレイクポイントが設定された行番号とファイル名が表示されます。Enabled フィールドでは、ブレイクポイントが有効か否かが表示されます。ブレイクポイントのフィールドのいずれかをダブルクリックすると、ソースコードウィンドウにブレイクポイントを設定したソース文が表示されます。

ブレイクポイントの設定された行までプログラムが到達して停止する前に、プログラムの実行をさらに制御する別の条件を設定することもできます。プログラムを停止するまで同一の命令文が何度も実行されるような場合に、これがたいへん重要になります。ブレイクポイントに追加の条件を設置するには、Console ウィンドウから以下に示す list breakpoints コマンドと condition コマンドを使用します。

  1. Console ペインを選択して、list breakpoints コマンドを入力します。プログラムのブレイクポイントに関する ID 付きの情報が一覧で表示されます。上記で示した Breakpoint ウィンドウで ID を確認することもできます。
  2. ステップ1で得られたブレイクポイントの ID を使って、条件を設定する condition コマンドを使用します。以下はその例です。
    condition 3 ((yag(1) .LT. 150) .OR. (yag(10) .GR. 1000))

ブレイクポイントとコンディションに関する詳しい内容は、マニュアルの Command Reference セクションをご覧ください。

 

変数の表示

プログラムの変数に関する情報は、Fx3 の Watches ペインに表示されます。サブルーチンや関数内で使用されているすべての変数は、Locals ペイン内に同時に表示されます。

Watches ペインには、シンボルの名前、タイプ、現在値が表示されます。シンボルが Fortran 90 由来の型やストラクチャなどの集合データ型である場合は、シンボル名の横にある+記号をクリックすることで、その構成要素を表示させることができます。シンボルが配列の場合は、シンボル名をダブルクリックすることで配列要素を表示できます。

デフォルトの値は、変数のデータ型と一致する形式で表示されます。変数の値を選択して、右クリックで Format メニューから形式を選択することによって、変数の表示形式を変更することができます。

ペインの幅は必要に応じて自由に調整できます。タイトルを区切る縦線のいずれかにマウスを合わせ(カーソルの形状が変わります)、それを適当な位置までドラッグしてください。

 

変数の変更

プログラムの変数の値は、Watches ウィンドウの Value フィールド上でマウスボタンをダブルクリックすることによって、修正または変更することができます。この操作を行うと、値がダークブルーの編集領域で表示されます。既存の値や型を直接、別の値に編集することができます。 Value フィールドには式を入力することも可能で、Fx3 はそれを評価します。

Value フィールドでは、Undo (Ctrl+Z) などの編集作業に役立つ様々な標準テキスト編集コマンドを使用することもできます。

 

デバッグ作業のヒント

Fx3 がプログラムを自らデバッグすることはできませんが、プログラミングのエラーや論理的な欠陥を見つけだすのに欠かせない重要な情報をプログラマに提供します。大事な情報を集めるのに重要なことは、正しい質問を投げかけることです。このセクションでは、デバッグ作業を最大限に生かすための一般的なガイドラインとチップスをまとめてみました。