library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


10.1.4 ソース・ファイルの記憶位置の指定

ソース・ファイルの特性と記憶位置についての情報は,プログラムのデバッグ・シンボル・テーブルに入っています。ソース・ファイルがコンパイル後に別のディレクトリに移動された場合,そのソース・ファイルが見つからないことがあります。ソース・ファイルの記憶位置をデバッガに指示するには, DBG> プロンプトで SET SOURCE コマンドを入力します ( 第 8.3 節 を参照)。

10.2 ユーザ・プログラムの編集

OpenVMS デバッガには簡単なテキスト・エディタが用意されており,ユーザ・プログラムをデバッグ中にソース・ファイルを編集することができます ( 図 10-3 を参照)。

デバッガの HP DECwindows Motif for OpenVMS メニュー・インタフェースで使用できるテキスト・エディタは,簡単な機能のエディタであるため,ランゲージ・センシティブ・エディタ (LSE) のような優れた機能を持つエディタにはおよびません。ただし「Commands」メニューの「Edit File」項目で起動するテキスト・エディタに,このような優れた機能を持つエディタを使用することはできません。内蔵エディタ以外のエディタを使用する場合は,コマンド・ビューの DBG> プロンプトで Edit コマンドを入力します ( 本書の第 3 部にある EDIT コマンドの項を参照 )。

注意

コマンド・プロンプトに対して EDIT コマンドを入力すると,デバッガはデバッグ・セッションを起動した DECterm ウィンドウをユーザ定義エディタ・ウィンドウとして使用します (COMMANDS EDIT FILE プルダウン・メニューにハードワイヤ接続されているデバッガの組み込みエディタは使用されません )。この動作により,エディタを柔軟に選択できるようになります。FILE EXIT または MWM Close を使用して,この DECterm ウィンドウを誤って終了した場合には,デバッグ・セッションは異常終了し,親ウィンドウが失われます。

図 10-3 エディタ・ウィンドウ


エディタを起動するには,メイン・ウィンドウの「Command」メニューで「Edit File」を選択します。省略時の設定では,このエディタによりバッファが1つオープンされ,ソース・ビューに現在表示されているモジュールがそのバッファに表示されます。このバッファには,バッファのファイルに関するファイル指定の名前がつけられます。ソース・ビューにファイルが表示されない場合,main_buffer という名前を持つ空のテキスト・バッファが表示されます。バッファ名は,エディタ・ビューのメニュー・バーのすぐ下にあるバッファ・メニューに表示されます。

「File」メニューで「New」( 空のテキスト・バッファ ) または「Open」 ( 既存のファイル ) を選択すると,テキスト・バッファをいくつでも作成することができます。各テキスト・バッファの名前はバッファ・メニューに表示されます。バッファ間でテキストのカット,コピー,ペーストを実行するには,「Edit」メニューで項目を選択してから,バッファ・メニューでバッファを選択します。

前方検索,後方検索,置換の各操作を実行するには,「Find」と「Replace with」の各フィールドに文字列を入力してから,上下の方向を表した矢印をクリックします。 Return キーを繰り返し押すと,文字列が繰り返し検索されます。「Edit」メニューで「Find/Replace Next」または「Find/Replace Previous」を選択して検索を繰り返すこともできます。

ファイルを保存するときは,「File」メニューから「Save」または「Save As」を選択します。変更したバッファをクローズしたり,デバッガを終了したりする前に,その内容を保存していない場合は,警告メッセージが表示されます。

ソース・コードを変更して,その結果をテストするときは,次の手順で行います。

  1. デバッガを実行していないいDECtermウィンドウを選択する。

  2. プログラムをコンパイルし直す。

  3. プログラムをリンクし直す。

  4. デバッグ・セッションに戻る。

  5. メイン・ウィンドウの「File」メニューから「Run Image...」を選択する。

10.3 プログラムの実行

この節では次の 3 つの内容について説明します。

現在のデバッグ・セッションで自分のプログラムを再実行したり別のプログラムを実行したりする方法については, 第 9.3 節第 9.4 節 を参照してください。

10.3.1 実行の停止箇所の特定

プログラムの実行が一時停止している箇所を明らかにするには,次の手順に従ってください。

  1. 現在位置ポインタがソース・ウィンドウに表示されていない場合,ソース・ウィンドウの「Call Stack」メニューをクリックして,現在位置ポインタを表示する( 図 10-1 を参照)。

  2. 現在位置ポインタを見る。

呼び出しスタック上で現在アクティブなルーチン呼び出しの並びの一覧を表示するには,「Call Stack」メニューをクリックします。レベル 0 は実行が一時停止しているルーチンを示し,レベル 1 は呼び出し元ルーチンを示します。

10.3.2 プログラム実行の開始または再開

現在位置からプログラムの実行を開始したり実行を再開したりするには,プッシュ・ボタン・ビューで「Go」ボタンをクリックします ( 図 8-3 を参照)。

次のような状況では,デバッガの介入なしに自由にプログラムを実行するのが便利です。

プログラムを開始すると,次のいずれかが発生するまで実行が続きます。

プログラムの実行が中断すると,メイン・ウィンドウの表示が更新され,現在位置ポインタは次に実行されるコードの行を示します。

10.3.3 プログラムのソース行の 1 行ずつの実行

プログラムのソース行を 1 行ずつ実行するには,プッシュ・ボタン・ビューで 「STEP」ボタンをクリックするか,またはコマンド・ビューでSTEPコマンドを入力します。このデバッグ方法 (ステップ実行と呼ぶ) はよく使用されます。

ソース行が1行実行されると,ソース・ビューが更新され,現在位置ポインタは次に実行される行を示します。

ソース行とステップ実行の動作については,次の点に注意してください。

コンパイル時にコードを最適化した場合,表示されるソース・コードと実際に実行しているコードとが対応しないことがあるので注意してください ( 第 1.2 節 を参照)。

10.3.4 呼び出されるルーチン内の命令のステップ実行

ルーチン呼び出し文でプログラムの実行が一時停止したときは,「Step」ボタンをクリックすれば,通常,呼び出されるルーチン内の命令が 1 ステップ実行されます (そのときのコーディング方法によって異なる)。そしてデバッガは,呼び出されたルーチン内にはブレークポイントが設定されていないとみなし,実行を呼び出し元ルーチン内のその次のソース行で中断します。その結果,呼び出されるルーチン (そのうちのいくつかはシステム・ルーチンかライブラリ・ルーチンである) を最後までトレースで実行する必要がないので,コードを迅速にステップ実行できます。このことを,呼び出されるルーチンを1 ステップとして実行するといいます。

呼び出されるルーチン内の命令をステップ実行によって 1 行ずつ実行するには,次の手順に従ってください。

  1. ルーチン呼び出し文で実行を中断する。そのためには,たとえばブレークポイント( 第 10.4 節 を参照)を設定し,プッシュ・ボタン・ビューの「Go」ボタンをクリックする。

  2. 呼び出し文で実行が一時停止したら,プッシュ・ボタン・ビューの 「S/in」ボタンをクリックするか,DBG>プロンプトでSTEP/INTOと入力する。その結果,実行は呼び出されたルーチンの先頭を通過する。

呼び出されたルーチン内の命令が実行され始めたら,「Step」ボタンを使用してルーチンを 1 行ずつ実行します。

ルーチン呼び出し文で実行が一時停止していないときに「S/in」ボタンをクリックすると,「Step」ボタンのクリックと同じ働きをします。

10.3.5 呼び出されたルーチンからの戻り

呼び出されたルーチン内で実行が中断しているときは, プッシュ・ボタン・ビューの「S/ret」ボタンをクリックするか, DBG> プロンプトで STEP/RETURN コマンドを入力することにより,そのルーチンの最後まで直接実行できます。

デバッガは,そのルーチンの戻り命令実行の直前で中断します。その時点で,そのルーチンの呼び出しフレームは呼び出しスタックから削除されていないので,そのルーチンにローカルな変数の値を参照することなどができます。また次の Return 命令または Call 命令までプログラムを直接実行するときは,プッシュ・ボタンの S/call ボタンを使用 ( または DBG> プロンプトで STEP/CALL コマンドを入力 ) します。

「S/ret」ボタンは,システム・ルーチンやライブラリ・ルーチン内の命令を誤ってステップ実行した場合に特に役立ちます ( 第 10.1.3 項 を参照)。

10.4 ブレークポイントの設定による実行の中断

ブレークポイントとは,変数の値のチェックやルーチン内の命令のステップ実行などを行うために実行をやめる必要があるプログラム内の記憶位置のことです。

デバッガの HP DECwindows Motif for OpenVMS ユーザ・インタフェースでは,次の各箇所にブレークポイントを設定できます。

注意

PointerGrab または KeyboardGrab によって,マウス・ポインタを制御しているルーチン内のブレークポイントで停止すると,ワークステーションはハングします。

この問題を回避するには,2 つのワークステーションを使用してプログラムをデバッグします。詳細については, 第 9.8.3.1 項 を参照してください。

デバッガでは次の 2 種類のブレークポイントを設定できます。

条件付きブレークポイントであり同時にアクション・ブレークポイントでもあるブレークポイントを設定できます。

次の各項ではこれらのブレークポイント・オプションについて説明します。

10.4.1 ソース行へのブレークポイントの設定

ソース・ディスプレイのソース行のうち,その左にボタンがあるソース行には,ブレークポイントを設定できます。ボタンが表示されている行は,コンパイラが実行可能コードを生成した行 ( ルーチン宣言,代入文など ) です。

ソース行にブレークポイントを設定するには,次の手順に従ってください。

  1. ブレークポイントを設定するソース行を検索する ( 第 10.1 節 を参照 )。

  2. その行の左にあるボタンをクリックして選択する。ボタンが選択されるとブレークポイントが設定される。ブレークポイントは,ソース行の先頭,つまりそのソース行に対応する最初の機械語コード命令に設定される。

図 10-4 では,37行目の先頭にブレークポイントが設定されている。

図 10-4 ソース行へのブレークポイントの設定


10.4.2 ソース・ブラウザによるルーチン上のブレークポイントの設定

ルーチンにブレークポイントを設定すれば,そのルーチンまで直接実行を進めてそのローカル環境を検査することができます。

ルーチンにブレークポイントを設定するには,次の手順に従ってください。

  1. メイン・ウィンドウの「File」メニューで「Browse Sources...」を選択する ( 図 10-2 を参照 )。「Source Browser」ダイアログ・ボックスに,実行可能なイメージおよびこれとリンクされたすべての共用可能イメージ ( たとえば,DEBUG および LIBRTL) の名前が表示される。実行可能なイメージは強調表示される。このイメージにシンボリック情報がない場合,リンクされたイメージの名前が薄く表示される。

  2. 実行可能なイメージの名前をダブル・クリックする。そのイメージ名の下にインデントされて,そのイメージ内の各モジュールの名前が表示される。

  3. 表示したいモジュールの名前をダブル・クリックする。モジュール名の下に,そのモジュール内のルーチンの名前が ( インデント付きで ) 表示される ( 図 10-5 を参照 )。

  4. ブレークポイントを設定するルーチンの名前をクリックする。 Set Breakpoint コマンドの結果が,コマンド・ビューのコマンド行にエコーバックされる。
    また別の方法として,ルーチン名をクリックした後,「Source Browser」ビューの「Set Breakpoint」ボタンをクリックする方法もある。この場合も,Set Breakpoint コマンドの結果が,コマンド・ビューのコマンド行にエコーバックされる。

図 10-5 ルーチンへのブレークポイントの設定


10.4.3 例外ブレークポイントの設定

例外ブレークポイント を設定すると,例外がシグナル通知されたとき,ユーザ・プログラムによって宣言された例外ハンドラが実行される前に実行が中断されます。したがって例外ハンドラが使用できる場合は,その中の命令をステップ実行することにより,制御の流れをチェックできます。

例外ブレークポイントを設定するには,メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Break」メニューから「On Exception」を選択します。例外がシグナル通知されるたびに例外ブレークポイントが検出されます。

10.4.4 現在設定されているブレークポイントの識別

現在設定されているブレークポイントを次の3つの方法で知ることができます。


前へ 次へ 目次 索引