前へ | 次へ | 目次 | 索引 |
この節では次の 3 つの内容について説明します。
現在のデバッグ・セッションで自分のプログラムを再実行したり別のプログラムを実行したりする方法については,第 9.3 節 と 第 9.4 節 を参照してください。
10.3.1 実行の停止箇所の特定
プログラムの実行が一時停止している箇所を明らかにするには,次の手順に従ってください。
呼び出しスタック上で現在アクティブなルーチン呼び出しの並びの一覧を表示するには,「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 行ずつ実行するには,次の手順に従ってください。
呼び出されたルーチン内の命令が実行され始めたら,「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 ブレークポイントの設定による実行の中断
ブレークポイントとは,変数の値のチェックやルーチン内の命令のステップ実行などを行うために実行をやめる必要があるプログラム内の記憶位置のことです。
デバッガの Compaq DECwindows Motif for OpenVMS ユーザ・インタフェースでは,次の各箇所にブレークポイントを設定できます。
PointerGrab または KeyboardGrab によって,マウス・ポインタを制御しているルーチン内のブレークポイントで停止すると,ワークステーションはハングします。 この問題を回避するには,2 つのワークステーションを使用してプログラムをデバッグします。詳細については,第 9.7.3.1 項 を参照してください。 |
デバッガでは次の 2 種類のブレークポイントを設定できます。
指定した関係式の評価が真のときにだけ検出される。
このブレークポイントが検出されると,指定したシステム固有コマンドが 1 つまたは複数実行される。
条件付きブレークポイントであり同時にアクション・ブレークポイントでもあるブレークポイントを設定できます。
次の各項ではこれらのブレークポイント・オプションについて説明します。
10.4.1 ソース行へのブレークポイントの設定
ソース・ディスプレイのソース行のうち,その左にボタンがあるソース行には,ブレークポイントを設定できます。ボタンが表示されている行は,コンパイラが実行可能コードを生成した行(ルーチン宣言,代入文など)です。
ソース行にブレークポイントを設定するには,次の手順に従ってください。
図 10-4 では,37行目の先頭にブレークポイントが設定されている。
図 10-4 ソース行へのブレークポイントの設定
ルーチンにブレークポイントを設定すれば,そのルーチンまで直接実行を進めてそのローカル環境を検査することができます。
ルーチンにブレークポイントを設定するには,次の手順に従ってください。
また別の方法として,ルーチン名をクリックした後,「Source Browser」ビューの「Set Breakpoint」ボタンをクリックする方法もある。この場合も,Set Breakpoint コマンドの結果が,コマンド・ビューのコマンド行にエコーバックされる。
図 10-5 ルーチンへのブレークポイントの設定
例外ブレークポイント を設定すると,例外がシグナル通知されたとき,ユーザ・プログラムによって宣言された例外ハンドラが実行される前に実行が中断されます。したがって例外ハンドラが使用できる場合は,その中の命令をステップ実行することにより,制御の流れをチェックできます。
例外ブレークポイントを設定するには,メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Break」メニューから「On Exception」を選択します。例外がシグナル通知されるたびに例外ブレークポイントが検出されます。
10.4.4 現在設定されているブレークポイントの識別
現在設定されているブレークポイントを次の3つの方法で知ることができます。
ブレークポイント・ビューには,各ブレークポイントのモジュール名と行番号の一覧が表示される(第 10.1 節 を参照)。表示された各ブレークポイントの隣にある塗りつぶされたボタンは,そのブレークポイントが有効なことを示す。塗りつぶされていないボタンは,そのブレークポイントが無効なことを示す。
ブレークポイントを設定すると,無効化,有効化または 削除を行うことができます。
無効にしたブレークポイントは,プログラムの実行中はデバッガによって無視されます。しかし,そのブレークポイントはブレークポイント・ビューに表示されているので,あとで,たとえばプログラムの再実行時などに有効にできます(第 9.3 節 を参照)。次の点に注意してください。
すべてのブレークポイントを無効にするには,「Break」メニューで「Deactivate All Breaks」を選択する。
あるブレークポイントを有効にすれば,そのブレークポイントはプログラムの実行中有効になります。
ブレークポイント・ビューの場合,ブレークポイントが現在無効であれば,「Break」メニューの「Toggle」を選択することもできる。
あるブレークポイントを取り消すと,そのブレークポイントはブレークポイント・ビューに表示されなくなり,あとでビューを使用して有効にできなくなります。第 10.4.1 項 と 第 10.4.2 項 の説明に従ってブレークポイントを再設定する必要があります。次の点に注意してください。
条件付きブレークポイントで実行が中断されるのは,指定された式の評価が真のときだけです。たとえば,プログラム内のある変数の値が 4 のときにブレークポイントが有効になるように指定することができます。その変数の値が 4 でなければ,そのブレークポイントは無視されます。
プログラムの実行中にブレークポイントが検出されると,条件式が評価されます。
次の手順により,条件付きブレークポイントが設定されます。その場合,以前同じ場所にブレークポイントが設定されていたかどうかは関係ありません。
図 10-6 条件付きブレークポイントの設定
条件付きブレークポイントを変更するには,次の手順に従ってください。この手順で,既存の条件付きブレークポイントの位置や割り当てた条件を変更したり,無条件ブレークポイントを条件付きブレークポイントに変更することができます。
前へ | 次へ | 目次 | 索引 |