日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
変数 j には,4つの存在期間セグメントがあります。PCアドレスは,イメージのリンク結果を示し,同時にソース・プログラムの行番号との対応が,コメントにより示されます。
Alpha システムの場合,デバッガは,どの割り当てとどの定義が変数の表示値を規定するかについて,トラックして報告します。この補足情報を使用することにより,コードのモーションなどの最適化の効果のうちいくつかを処理できるようになります。変数値がプログラムの予期しない場所から来ているような場合も,その効果を処理できるようになります。
◆EXAMINE/DEFINITIONSコマンド (Alpha のみ)
存在期間分割変数の場合,EXAMINEコマンドは,アクティブな存在期間の値を表示するだけでなく,存在期間の定義位置も表示します。定義位置とは,存在期間が初期値を受け取る場所を表します。定義位置が1つの場合,それが唯一の位置になります。
存在期間の初期値が複数の位置から来ている場合,定義位置も複数になります。前の例では,プログラムが printf, で停止したときに j をテストすると次のようになります。
DBG> examine j DOCT8\doct8\j: 2 value defined at DOCT8\doct8\%LINE 390 value defined at DOCT8\doct8\%LINE 394 |
この場合,393 行目の式が TURE かどうかにより,値が 390 行目と 394 行目のどちらから来るか決まるため,j の存在期間には,2つの定義位置があることになります。
省略時の場合,変数の内容がテストされるときに最大で5つの定義位置が表示されます。定義位置の数を指定するときは,次の例のように/DEFINITIONS= n修飾子を使用します。
DBG> EXAMINE/DEFINITIONS=74 FOO |
省略形は/DEFIになります。
省略時の定義数を5以外の数にしたい場合,次のようなコマンド定義を使用します。
DBG> DEFINE/COMMAND E = "EXAMINE/DEFINITIONS=100" |
/DEFINITIONS修飾子に100が設定されていて,テストしている存在期間分割変数に120の定義位置がある場合,デバッガは,指定に従って100個表示しますが,同時に次のようなレポートも表示します。
there are 20 more definition points |
デバッグ・セッションの間,デバッガは端末の画面を入出力 ( I/O ) のために使用します。1 台の端末を使用して,画面の大部分または全体を使用するような画面用プログラムのデバッグを行う場合,デバッガの入出力はプログラムの入出力に対して上書きしたり上書きされたりします。
1 台の端末をプログラムの入出力とデバッガの入出力のために使用すると,画面モードでデバッグし画面用プログラムが実行時ライブラリ ( RTL ) 画面管理 ( SMG$ ) ルーチンのどれかを呼び出している場合はさらに複雑になります。これは,デバッガの画面モードも SMG ルーチンを呼び出すからです。このような場合,デバッガとユーザ・プログラムは同じ SMG ペーストボードを共用し,一層の混乱を引き起こします。
画面用プログラムをデバッグする際のこのような問題を回避するために,デバッガの入出力をプログラムの入出力から分離するために次の方法のいずれかを使用します。
TTD1: が現在の端末であり,そこからデバッグを開始するものとします。デバッガの入出力は端末 TTD2: に表示し,TTD1: はプログラムの入出力専用にするものとします。
次の手順に従ってください。
$ ALLOCATE TTD2: |
$ DEFINE DBG$INPUT TTD2: $ DEFINE DBG$OUTPUT TTD2: |
DBG$INPUT および DBG$OUTPUT は,デバッガの入力装置および出力装置をそれぞれ指定する。省略時には,これらの論理名はそれぞれ SYS$INPUT および SYS$OUTPUT になる。DBG$INPUT および DBG$OUTPUT を TDD2: に割り当てることによって,デバッガ・コマンドおよびデバッガの出力を TDD2: に表示できるようになる。
$ SHOW DEVICE/FULL TTD2: |
装置タイプが unknown のとき,システム管理者または LOG_IO 特権か PHY_IO 特権を持つユーザは次の例のような方法でシステムに対して端末タイプを認識させる必要がある。この例では,端末を VT200 としている。
$ SET TERMINAL/PERMANENT/DEVICE=VT200 TTD2: |
$ DEBUG/KEEP . . . DBG> RUN prog-name |
デバッガの入出力をTTD2:で観察することができる。
$ DEALLOCATE TTD2: |
適切に保護されているシステムでは,ある端末から別の端末を占有することができないように,端末が保護されています。
必要な保護を設定するために,システム管理者または必要な特権を持つユーザは次の例のような手順に従う必要があります。
この例では,TTD1: が現在の端末 ( デバッガを起動する端末 ),TTD2: がデバッガの入出力を表示するために占有する端末です。
$ SET PROCESS/PRIV=LOG_IO $ SET TERMINAL/NOHANG/PERMANENT $ LOGOUT/NOHANG |
$ SET ACL/OBJECT_TYPE=DEVICE/ACL=(IDENT=[PROJ,JONES],ACCESS=READ+WRITE) TTD2: (1) $ SET PROTECTION=WORLD:RW/DEVICE TTD2: (2) |
1 つの同じデバッグ・セッションの中で,ソース・コードが異なる言語で記述されたモジュールをデバッグすることができます。言語固有の動作について,混乱を避けるために注意すべきことを中心に説明します。
どの言語の場合でも,デバッグの際には次を参照してください。
プログラムをデバッガの制御下に置くとき,デバッガは 現在の言語 をメイン・プログラムが含まれているモジュール ( 通常は,イメージ転送アドレスを含んでいるルーチン ) を記述している言語に設定します。現在の言語は,その時点で識別されます。次に例を示します。
$ DEBUG/KEEP Debugger Banner and Version Number DBG> RUN prog-name Language: PASCAL, Module: FORMS DBG> |
現在の言語の設定は,デバッガ・コマンドで指定した名前,演算子,式をデバッガがどう解析し,解釈するかを決定します。変数の型の設定,配列やレコードの構文,整数データの省略時の基数,大文字/小文字の区別などの解釈も含まれます。言語の設定によって,ユーザ・プログラムに関連するデータの表示方法も決まります。
多くのプログラムでは,メイン・プログラムの言語とは別の言語で記述されたモジュールが含まれています。混乱をできるだけ少なくするために,省略時の設定ではデバッガの言語は,別の言語で記述されたモジュールの中で実行が一時停止しても,デバッグ・セッションを通してメイン・プログラムの言語に設定されたまま変わりません。
このようなモジュールでのシンボリック・デバッグの利点を最大に活用するためには,SET LANGUAGE コマンドを使用してデバッグ・コンテキストを別の言語のデバッグ・コンテキストに設定します。たとえば次のコマンドは,デバッガがシンボルや式などを COBOL 言語の規則に従って解釈するように設定します。
DBG> SET LANGUAGE COBOL |
Alpha プロセッサでは, SET LANGUAGE コマンドは次のキーワードを受け付けます。
Ada | BASIC | BLISS | C |
C++ | COBOL | Fortran | MACRO-32 1 |
MACRO-64 | Pascal | PL/I |
Integrity プロセッサでは, SET LANGUAGE コマンドは次のキーワードを受け付けます。
Assembler (IAS) | BASIC | BLISS | C |
C++ | COBOL | Fortran | MACRO-32 1 |
IMACRO | PASCAL |
さらに,サポートされていない言語で記述されたプログラムをデバッグする場合,SET LANGUAGE UNKNOWN コマンドを指定することができます。サポートされていない言語でもデバッガを最大限活用できるようにするために,SET LANGUAGE UNKNOWN コマンドはデバッガがデータ形式と演算子の組み合わせを広く受け付けるようにします。これらの中には,サポートされている言語の少数にだけ固有のものも含まれます。言語が UNKNOWN に設定された場合に認識される演算子や構造については,デバッガのオンライン・ヘルプに示します ( HELP Language と入力します )。
ここでは,各言語でデバッグを行う場合に注意すべき相違点を説明します。SET LANGUAGE コマンドの影響を受ける相違点およびその他の相違点,たとえば,言語固有の初期化コードや定義済みのブレークポイントなどが挙げられています。
ここに挙げられているものはすべてではありません。詳細については,デバッガのオンライン・ヘルプ ( HELP Language と入力する ) および使用している言語のドキュメントを参照してください。
整数データを入力したり表示したりするための省略時の基数は,ほとんどの言語では 10 進数です。
Alpha プロセッサでは,BLISS, MACRO--32 および MACRO--64 の場合は例外であり,これらは 16 進数を省略時の基数とします。
新しい省略時の基数を設定するには,SET RADIX コマンドを使用します。
いくつかのデバッガ・コマンドや構造は言語式を評価します。
これらのコマンドを処理するとき, 第 4.1.6 項 で説明されているように,デバッガは現在の言語の構文および現在の基数に基づいて言語式を評価します。デバッガは,( コマンドを入力するときではなく ) 実行のたびに,WHEN 節や DO 節の式の構文をチェックし,その後これらを評価します。
演算子は言語によって大きく異なりますので注意してください。たとえば,次の 2 つのコマンドはそれぞれ Pascal および Fortran で記述された同じ意味の式を評価しています。
14.3.2 言語に固有の相違点
14.3.2.1 省略時の基数
14.3.2.2 言語式の評価
DBG> SET WATCH X WHEN (Y < 5) ! Pascal DBG> SET WATCH X WHEN (Y .LT. 5) ! FORTRAN |
言語が PASCAL に設定されていて,最初の Pascal のコマンドを入力したとします。ここで Fortran のルーチン内の命令をステップ実行して言語を Fortran に設定し,処理を再開します。言語が Fortran に設定されている間,デバッガは式 (Y < 5) を評価することができません。その結果,無条件のウォッチポイントを設定します。ウォッチポイントが検出されると,< 演算子に対する構文エラーが返されます。
このような矛盾は,デバッガ・コマンド・プロシージャやデバッガ初期化ファイル内で言語式を評価するコマンドを実行する場合にも発生します。
言語が BLISS に設定された場合,デバッガは変数名または他のアドレス式を含む言語式を別の言語が設定された場合とは異なるように処理します。詳細については
第 4.1.6 項 を参照してください。
配列要素やレコード構成要素 ( 適用できる場合 ) を表す文法は,言語によって異なります。
たとえば,ある言語では配列要素を区切るために大括弧 ([]) を使用し,別の言語では括弧 (( )) を使用します。
ある言語ではゼロを基底とする配列を持ち,また別の言語では,次の例のように1を基底とする配列を持ちます。
14.3.2.3 配列およびレコード
DBG> EXAMINE INTEGER_ARRAY PROG2\INTEGER_ARRAY (1,1): 27 (1,2): 31 (1,3): 12 (2,1): 15 (2,2): 22 (2,3): 18 DBG> |
ある言語 ( Pascal や Ada など ) では,特定の配列宣言によって配列が何を基底にするかが決まります。
14.3.2.4 大文字/小文字の区別
C 言語では,名前や言語式の大文字/小文字が区別されます。名前や言語式を指定する場合,ソース・コードに記述されているとおりに指定しなければなりません。たとえば,言語が C に設定されているとき,次の 2 つのコマンドは等しくありません。
DBG> SET BREAK SCREEN_IO\%LINE 10 DBG> SET BREAK screen_io\%LINE 10 |
目次 | 索引 |
|