前へ | 次へ | 目次 | 索引 |
デバッガの DECwindows Motif ユーザ・インタフェースについては,第 3 部 をご覧ください。
本章では,デバッガの基本的なコマンド・インタフェースについて説明します。
デバッガの使用法は,デバッグの対象となるプログラムの種類,探しているエラーの種類,およびユーザの個人的な方法や経験など,いくつかの要素によって決まります。本章では,ほとんどの状況にあてはまる,次のような基本的な作業について説明します。
ほとんどの例は,すべてのサポート言語に十分適用できまが,一部には,言語特有のものもあります。
第 2.6 節 内のデバッギング・セッション例は,エラーを見つけ修正する方法を説明します。
デバッギング・セッションの開始と終了についての詳しい説明は,第 1.3 節 を参照してください。
2.1 デバッガ・コマンドの入力とオンライン・ヘルプへのアクセス
第 1.3 節 の説明どおりにいったんデバッガを起動すると,デバッガ・プロンプト(DBG>)が表示されているときはいつでも,デバッガ・コマンドを入力できます。デバッガ・コマンドを入力するには,キーボード上でコマンドを入力して Return キーを押します。たとえば,次のコマンドは変数 COUNT にウォッチポイントを設定します。
DBG> SET WATCH COUNT |
デバッガ・コマンドについての詳しい説明は,『デバッガ・コマンド・ディクショナリ』またはオンライン・ヘルプで参照できます。
次のトピックについても,オンライン・ヘルプが使用できます。
新機能
リリース・ノート
アドレス式
組み込みシンボル
DECwindowsインタフェース
キーパッド定義
言語サポート
論理名
メッセージ(診断メッセージ)
(シンボリック名を修飾する)パス名
画面モード
(プログラムからデバッガを起動する)SS$_DEBUG条件
システム管理
VWSワークステーション
上記の任意のトピックに関するヘルプを表示するには,HELP topic と入力します。たとえば,診断メッセージに関する情報を表示するには,HELP Messages と入力します。
デバッガを起動すると,よく使用されるいくつかのコマンドが,自動的にメイン・キーボードの右側の数値キーパッド上のキーに割り当てられます。したがって,これらの機能は,コマンドを入力するか,またはキーパッド上のキーを押すことによって実行できます。
キーパッド上の定義済みキー機能を 図 2-1 に示します。
図 2-1 デバッガの定義済みキーパッド・キー機能---コマンド・インタフェース
ほとんどのキーパッド・キーには,DEFAULT,GOLD,BLUE の 3 つの定義済み機能があります。
図 2-1 では,各キーの中に DEFAULT,GOLD,および BLUE の各機能をそれぞれ上から下に順番に示してあります。次に例を示します。
通常,KP2,KP4,KP6,および KP8 の各キーは,それぞれ下方向,左方向,右方向,上方向の画面スクロールを実行します。また 図 2-1 に示したように,キーボードを MOVE,EXPAND,CONTRACT の各状態に設定すると,上の 4 つのキーを使用して,画面を 4 方向に移動,拡大,または縮小できます。キーパッド・キー定義を表示するには,HELP Keypad_Definitionsコマンドを入力します。
また,キーパッド・キー機能を再定義するには,DEFINE/KEY コマンドを使用します。
2.2 ソース・コードの表示
デバッガには,非画面モードと画面モードの 2 つの情報表示モードがあります。省略時の設定では,デバッガ起動時に非画面モードになります。しかし,画面モードでソース・コードを表示したほうがよい場合があります。次の 2 つの項では,2 つのモードについて簡単に説明します。
2.2.1 非画面モード
非画面モードは省略時の設定であり,入出力(I/O)を行用モードで表示します。本章での会話例は,第 2.2.2 項 を除き,すべて非画面モードを使用しています。
非画面モードでは,TYPE コマンドを使用して,1 行または複数行のソース行を表示します。たとえば,次のコマンドは,現在一時停止しているモジュールの 7 行目を表示します。
DBG> TYPE 7 module SWAP_ROUTINES 7: TEMP := A; DBG> |
ソース行の表示は,プログラムの実行とは関係ありません。現在一時停止しているモジュール以外のモジュール(コンパイル単位)からソース・コードを表示するには,TYPE コマンドにパス名を使用して,そのモジュールを指定します。たとえば,次のコマンドは,モジュール TEST の 16 行目から 21 行目までを表示します。
DBG> TYPE TEST\16:21 |
パス名については,STEP コマンドとともに 第 2.3.2 項 で詳しく説明します。
また,EXAMINE/SOURCE コマンドを使用すれば,特定の命令と対応するルーチンまたは他の任意のプログラム記憶位置のソース行を表示することができます。
ブレークポイント,ウォッチポイント,STEP コマンドのあと,またはトレース・ポイントが検出されたとき(第 2.3 節 参照)にデバッガが実行を中断する場合は,ソース行が自動的に表示されます。
プログラム内のさまざまな記憶位置のソース行を表示したあと,現在実行が一時停止している記憶位置を再表示するには,KP5キーを押します。
表示するソース行の位置を確定できない場合,デバッガは診断メッセージを発行します。ソース行を表示できない理由は,いくつか考えられます。次に例を示します。
画面モードから非画面モードに移行するには,PF1 キーを押したあと,PF3 キーを押すか,または SET MODE NOSCREEN を入力します。TYPE コマンドおよび EXAMINE/SOURCE コマンドは,非画面モードだけでなく,画面モードでも使用できることに注意してください。
2.2.2 画面モード
画面モードは,ソース・コードを表示する最も簡単な方法を提供します。画面モードに切り替えるには,PF3 キーを押すか,または SET MODE SCREEN と入力します。画面モードでは,図 2-2 に示すように省略時の設定により,画面は 3 つの部分,すなわち SRC,OUT,および PROMPT に分割されます。
図 2-2 省略時の画面モード・ディスプレイ構成
「SRC」ディスプレイは,現在実行を一時停止しているモジュールのソース・コードを表示します。最左欄の矢印は,プログラム・カウンタ(PC)の現在値に対応するソース行を指しています。PC は,次の実行命令のメモリ・アドレスを含むレジスタです。行番号は,コンパイラによって割り当てられますから,リスト・ファイル内の行番号と一致します。プログラムを実行するうちに,矢印は下に移動し,矢印がディスプレイの中央になるようにソース・コードは上にスクロールします。
「OUT」ディスプレイは,入力されたコマンドに対するデバッガの出力を表示します。「PROMPT」ディスプレイは,デバッガのプロンプト,ユーザの入力(ユーザの入力したコマンド),デバッガの診断メッセージ,およびプログラムの出力を表示します。
「SRC」ディスプレイと「OUT」ディスプレイをスクロールすれば,ディスプレイ・ウィンドウに収まらない情報もすべて,スクロールして見ることができます。スクロールするディスプレイを選択するには,KP3 キーを必要なだけ繰り返し押してください。省略時の設定では,「SRC」ディスプレイがスクロールします。上方スクロールには KP8 キーを,下方スクロールには KP2 キーを使用します。ディスプレイのスクロールは,プログラムの実行とは関係ありません。
画面モードで,実行を一時停止しているルーチンのソース行を確定できない場合,デバッガはソース行を表示できる,呼び出しスタック内の次のルーチンのソース行を表示しようとします。このようなルーチンのソース行が表示された場合,デバッガは次のメッセージを発行します。
%DEBUG-I-SOURCESCOPE, Source lines not available for .0\%PC. Displaying source in a caller of the current routine. DBG> |
このような場合,「SRC」ディスプレイ内の矢印は,呼び出し元ルーチンの CALL 文の直後のコードを含む行を示します。
2.3 プログラム実行の制御とモニタ
この節では次の作業の実行方法について説明します。
これらの情報を使用すれば,第 2.4 節 で説明するように,プログラム記憶位置を選択し,その記憶位置で変数の内容を検査および操作することができます。
2.3.1 プログラム実行の開始または再開
プログラムの実行を開始または再開するには,GO コマンドを使用します。
GO コマンドを使用してプログラムが開始されると,プログラムは次のいずれかのイベントが発生するまで実行を続けます。
ほとんどのプログラミング言語では,プログラムがデバッガの制御下に置かれたとき,メイン・プログラムの先頭で最初に実行を一時停止します。この時点で GO コマンドを入力すると,簡単に無限ループや例外をテストできます。
実行中に無限ループが発生すると,プログラムは終了せず,デバッガのプロンプトは再表示されません。プロンプトを表示するには,Ctrl/C を押して実行に割り込みをかけます(第 1.4 節 参照)。画面モードを使用している場合は,ソース・ディスプレイ内のポインタが実行停止箇所を示しています。また,SHOW CALLSコマンドを使用すれば,呼び出しスタック内の現在アクティブなルーチン呼び出しを確認できます(第 2.3.3 項 を参照)。
プログラムによって処理されない例外がシグナル通知されると,デバッガはその時点で実行を中断し,ユーザがコマンドを入力できるようにします。ユーザは,ソース・ディスプレイおよび SHOW CALLS ディスプレイを見て,実行が一時停止している箇所を見つけることができます。
GO コマンドの一般的な使用方法は,ブレークポイント,トレースポイント,およびウォッチポイントとともに使用する方法です。これらの使用方法については,それぞれ 第 2.3.4 項 ,第 2.3.5 項 ,および 第 2.3.6 項 で説明します。実行パス内にブレークポイントを設定して GO コマンドを入力すると,そのブレークポイントで実行が一時停止します。同様に,トレースポイントを設定すると,そのトレースポイントを通して実行がモニタされます。またウォッチポイントを設定すると,ウォッチされている変数の値が変化したとき,実行が一時停止します。
2.3.2 ステップ単位でのプログラムの実行
STEP コマンドを使用すれば,プログラムを一度に 1 ステップまたはそれ以上の単位で実行できます。
省略時の設定では,ステップ単位はソース・コード 1 行です。次の例では,STEP コマンドはソース・コードを 1 行実行し,動作("stepped to...")を報告し,次の実行行の番号(27)とソース・コードを表示します。
DBG> STEP stepped to TEST\COUNT\%LINE 27 27: X := X + 1; DBG> |
実行は,モジュール TEST 内のルーチン COUNT 内にある行 27 の最初の機械語コード命令で一時停止しています。
プログラム・シンボル(たとえば,行番号,ルーチン名,または変数名など)を表示する場合,デバッガは常に パス名 を使用します。パス名は,シンボルとそのシンボルの記憶位置を示す接頭辞から構成されます。上の例では,TEST\COUNT\%LINE27 がパス名です。パス名の一番左の要素はモジュール名です。そのあとには,右に移動するにしたがって,そのシンボルを含むネストされたルーチンおよびブロックが続きます。バックスラッシュ(\)は,要素を区切るために使用します。使用言語がAdaの場合は,Adaの構文にならってピリオドが使用されます。
パス名はデバッガに対して,プログラム内のシンボルを一意に識別します。通常,コマンド内でパス名を使用する必要があるのは,デバッガがプログラム内のシンボルのあいまいさを解消できないときだけです(第 2.5 節 を参照)。通常デバッガは,前後関係からユーザの意味するシンボルを特定できます。
STEP コマンドを使用する場合,デバッガは,コンパイラによってコード命令が生成されたソース行だけを実行可能な行とみなします。コメント行などのその他の行は,スキップされます。
ユーザは,行単位のステップ実行の代わりに命令単位のステップ実行(SET STEP INSTRUCTION)などの異なるステップ実行モードを指定することができます。また,省略時の設定では,呼び出されたルーチンは 1 ステップとして実行されます。すなわち,呼び出されたルーチンは実行されますが,ルーチン内で実行は一時停止されません。SET STEP INTO コマンドを入力すれば,現在実行を一時停止しているルーチン内だけでなく,呼び出されたルーチン内でも実行を中断するようデバッガに指示できます。省略時の設定は,SET STEP OVER です。
2.3.3 実行停止箇所の決定
SHOW CALLS コマンドは,デバッギング・セッション中に実行が一時停止した箇所が分からない場合(たとえば,Ctrl/C による割り込みのあとなど)に使用します。
このコマンドは,実行が一時停止しているルーチンに至るまでの呼び出しの並びをリストします。デバッガは,各ルーチン(実行が一時停止しているルーチンから始まる)について,次の情報を表示します。
VAX プロセッサでは,PC 値は,最も近い先行するシンボル値(たとえば,ルーチン)からの相対アドレスと,絶対アドレスの両方の値が表示されます。
Alpha システムでは,PC 値は,モジュール内の先頭コード・アドレスからの相対アドレスと,絶対アドレスの両方の値が表示されます。
次に例を示します。
DBG> SHOW CALLS module name routine name line rel PC abs PC *TEST PRODUCT 18 00000009 0000063C *TEST COUNT 47 00000009 00000647 *MY_PROG MY_PROG 21 0000000D 00000653 DBG> |
この例は,モジュール TEST 内のルーチン PRODUCT の 18 行目で実行が一時停止しており,ルーチン PRODUCT は,モジュール TEST 内のルーチン COUNT の 47 行目で呼び出され,さらにルーチン COUNT は,モジュール MY_PROG 内のルーチン MY_PROG の 21 行目で呼び出されたことを示しています。
前へ | 次へ | 目次 | 索引 |