日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
精度が異なる複数の数値型が入っている言語式を評価する場合,デバッガは評価の前にまず精度が低いほうの型を高い精度へ変換します。次の例では,デバッガは加算を行う前に整数 1 を実数の 1.0 へ変換します。
DBG> EVALUATE 1.5 + 1 2.5 DBG> |
基本的な規則は次のとおりです。
通常,デバッガではプログラミング言語より多様な数値の型変換ができます。また,デバッガの計算に使用されるハードウェア型 ( ワード,ロングワード, S 浮動小数点数など ) が,コンパイラの選択する型と異なる場合があります。デバッガは一部の言語ほど型指定が強力でなく厳密でもないので,EVALUATE コマンドによる式の評価が,コンパイラ生成コードによって計算され EXAMINE コマンドによって得られる結果と異なる場合もあります。
4.1.7 言語式と比較した場合のアドレス式
アドレス式を言語式と混同してはなりません。アドレス式がプログラム記憶位置を指定するのに対し,言語式は値を指定します。特に,EXAMINE コマンドはアドレス式をパラメータとして想定し,EVALUATE コマンドは言語式をパラメータとして想定します。これらの点を次の例に示します。
この例では,変数 X に値 12 が格納されます。これは EXAMINE コマンドによって確認されます。EVALUATE コマンドは,現在の X の値と整数リテラル 6 の和を計算して表示します。
DBG> DEPOSIT X = 12 DBG> EXAMINE X MOD3\X: 12 DBG> EVALUATE X + 6 18 DBG> |
次の例では,EXAMINE コマンドは,X のアドレスを 6 バイト超えたメモリ記憶位置に現在格納されている値を表示します。
DBG> EXAMINE X + 6 MOD3\X+6: 274903 DBG> |
この場合,記憶位置はコンパイラ生成型に対応づけられていません。したがって,デバッガはその記憶位置に格納されている値をロングワード整数型で解釈し表示します ( 第 4.1.5 項 を参照 )。
次の例では,X + 6 ( つまり 18 ) の値が X のアドレスを 6 バイト超えた記憶位置に格納されます。これは最後の EXAMINE コマンドによって確認されます。
DBG> EXAMINE X MOD3\X: 12 DBG> DEPOSIT X + 6 = X + 6 DBG> EXAMINE X MOD3\X: 12 DBG> EXAMINE X + 6 MOD3\X+6: 18 DBG> |
EXAMINE コマンドと DEPOSIT コマンドを使用する場合,現在と前と次の各データ記憶位置 (論理要素) を高速に参照するため,3 つの特殊な組み込みシンボル (アドレス式) が使用できます。それらは,ピリオド (.) とサーカンフレックス (^) と Return キーです。
EXAMINE コマンドまたは DEPOSIT コマンドといっしょにピリオド (.) だけを使用した場合,それは現在の値 ( EXAMINE コマンドまたは DEPOSIT コマンドによって参照された最新のプログラム記憶位置 ) を表します。次に例を示します。
DBG> EXAMINE X SIZE\X: 7 DBG> DEPOSIT . = 12 DBG> EXAMINE . SIZE\X: 12 DBG> |
サーカンフレックス (^) と Return キーはそれぞれ,前と次の論理データ記憶位置を最新の EXAMINE コマンドまたは DEPOSIT コマンドとの相対関係で表します ( それぞれ,論理的先行データと論理的後続データに相当します )。サーカンフレックスと Return キーは,配列の連続した添字付き要素を参照するのに役立ちます。次の例は,これらの演算子の使用法を整数配列 ARR を使用して示しています。
DBG> EXAMINE ARR(5) ! 配列 ARR の要素 5 を検査する。 MAIN\ARR(5): 448670 DBG> EXAMINE ^ ! 前の要素 (4) を検査する。 MAIN\ARR(4): 792802 DBG> EXAMINE [Return] ! 次の要素 (5) を検査する。 MAIN\ARR(5): 448670 DBG> EXAMINE [Return] ! 次の要素 (6) を検査する。 MAIN\ARR(6): 891236 DBG> |
デバッガは,論理的後続データと論理的先行データを判別するために現在の値に対応する型を使用します。
ピリオド,サーカンフレックス,および Return キーと同じ目的で,組み込みシンボルの %CURLOC,%PREVLOC,および %NEXTLOC を使用することもできます。これらのシンボルはコマンド・プロシージャ内で役立つほか,プログラムでサーカンフレックスを別の目的に使用する場合に便利です。さらに,論理的後続データを示すために Return キーを使用することは,すべての状況に適用できるわけではありません。たとえば,DEPOSIT コマンドを入力したあとで次の記憶位置を示すために Return キーを押すことはできませんが,シンボル %NEXTLOC ならば同じ目的で常に使用することができます。
EXAMINE コマンドおよび DEPOSIT コマンドと同様に,EVALUATE/ADDRESS コマンドも現在と前と次の論理要素組み込みシンボルの値を再設定します ( 第 4.1.11 項 を参照 )。ただし,EVALUATE/ADDRESS コマンドを入力したあとに,次の記憶位置を示すために Return キーを押すことはできません。デバッガの組み込みシンボルについての詳しい説明は, 付録 B を参照してください。
上記の例は,EXAMINE コマンドまたは DEPOSIT コマンドでシンボリック名を参照したあとの組み込みシンボルの使用を示したものです。メモリ・アドレスの検査やそこへの値の格納を行う場合,その記憶位置がコンパイラ生成型に対応づけられている場合もそうでない場合もあります。メモリ・アドレスを参照する場合,デバッガは論理的先行データと論理的後続データを判別するために次の規則を使用します。
現在の値が新しい検査操作または格納操作によって再設定されたとき,デバッガは,論理的後続データおよび論理的先行データを判別するために指示された方法で新しい記憶位置を型に対応づけます。次に例を示します。
FORTRAN プログラムで 3 つの変数,ARY,FLT,および BTE を次のように宣言したと想定します。
これらの変数用の記憶域が,メモリ内の 1000 から始まる連続したアドレスに割り当てられたと想定します。次に例を示します。
1000: ARY(1) 1002: ARY(2) 1004: ARY(3) 1006: FLT 1010: BTE 1011: undefined . . . |
連続した論理データ記憶位置を検査すると,次の結果が得られます。
DBG> EXAMINE 1000 ! 1000 に対応した ARY(1) を検査する。 MOD3\ARY(1): 13 ! 現在の値はこの時点で ARY(1) となる。 DBG> EXAMINE ! 次の記憶位置 ARY(2) を検査する。 MOD3\ARY(2): 7 ! その際,ARY(1) の型を参照する。 DBG> EXAMINE ! 次の記憶位置 ARY(3) を検査する。 MOD3\ARY(3): 19 ! 現在の値はこの時点で ARY(3) となる。 DBG> EXAMINE ! 1006 の値 (FLT) を検査する。 MOD3\FLT: 1.9117807E+07 ! 現在の値はこの時点で FLT となる。 DBG> EXAMINE ! 1010 の値 (BTE) を検査する。 MOD3\BTE: 43 ! 現在の値はこの時点で BTE となる。 DBG> EXAMINE ! 1011 の値 (未定義) を検査する。 1011: 17694732 ! データをロングワード整数として解釈する。 DBG> ! 記憶位置はシンボル化されていない。 |
これと同じ原則が,EXAMINE コマンドおよび DEPOSIT コマンドに型修飾子を使用する場合でも適用されます ( 第 4.5.2 項 を参照)。修飾子の指定する型によって要素のデータ境界が判別され,したがって論理的後続データと論理的先行データも判別されます。
4.1.9 言語固有性と現在の言語
デバッガでは,デバッグ・コンテキストをいずれかのサポートされた言語へ設定することができます。現在の言語を設定することにより,デバッガ・コマンド内にユーザが指定する名前,数字,演算子,および式をデバッガが解析し解釈する方法と,データを表示する方法が決まります。
省略時の設定では,メイン・プログラムを含むモジュールの言語が現在の言語となり,それはユーザがプログラムをデバッガの制御下に置いた時点で識別されます。次に例を示します。
$ PASCAL/NOOPTIMIZE/DEBUG TEST1 $ LINK/DEBUG TEST1 $ DEBUG/KEEP Debugger Banner and Version Number DBG> RUN TEST1 Language: PASCAL, Module: TEST1 DBG> |
別の言語で作成されたコードを持つモジュールをデバッグする場合には,新しい言語固有コンテキストを設定するために SET LANGUAGE コマンドを使用できます。
第 14.3 節 に重要な言語の相違点が説明してあります。言語式内の演算子とその他の構造に関するデバッガ・サポートは,各言語別にデバッガのオンライン・ヘルプに示されています ( HELP Language と入力します )。
4.1.10 整数データを入力または表示するための基数の指定
デバッガは,整数データを 4 つの基数 ( 10 進数,16 進数,8 進数,2 進数 ) のいずれかで解釈し表示することができます。ほとんどの言語の場合,省略時の基数は 10 進数です。
Alpha プロセッサでは BLISS と MACRO--32 と MACRO--64 は例外で,これらの省略時の基数は 10 進数です。
次の種類の整数データでは,基数を制御することができます。
このほかの種類の整数データでは,基数を制御できません。たとえば,アドレスは SHOW CALLS の表示では常に 16 進数を基数として表示されます。また,各種のコマンド修飾子 (/AFTER:n,/UP:n など) といっしょに整数 n を指定する場合には,10 進数を基数として使用しなければなりません。
基数の制御に使用する方法は,目的によって異なります。以後のすべてのコマンドに対して新しい基数を設定するには,SET RADIX コマンドを使用します。次に例を示します。
DBG> SET RADIX HEXADECIMAL |
このコマンドが実行されたあと,ユーザがアドレス式または言語式の中へ入力するすべてのデータは 16 進数として解釈されます。また, EVALUATE コマンドおよび EXAMINE コマンドによって表示されるすべての整数データも 16 進数を基数として表示されます。
SHOW RADIX コマンドは現在の基数 ( 省略時の基数,または SET RADIX コマンドによって設定された最新の基数 ) を表示します。次に例を示します。
DBG> SHOW RADIX input radix: hexadecimal output radix: hexadecimal DBG> |
SHOW RADIX コマンドは 入力基数 ( データ入力用 ) と 出力基数 ( データ表示用 ) の両方を表示します。 SET RADIX コマンドの修飾子 /INPUT および /OUTPUT を使用すれば,データの入力用と表示用に別の基数を指定できます。詳しい説明はオンライン・ヘルプの SET RADIX コマンドの説明を参照してください。
省略時の基数を復元するには CANCEL RADIX コマンドを使用します。
次の例では,現在の基数を変更せずに別の基数で整数データを表示させたり入力したりするための方法をいくつか示します。
現在の基数を変更せずに整数データを別の基数へ変換するには,EVALUATE コマンドに基数修飾子 (/BINARY,/DECIMAL,/HEXADECIMAL,/OCTAL) を指定します。次に例を示します。
DBG> SHOW RADIX input radix: decimal output radix: decimal DBG> EVALUATE 18 + 5 23 ! 23 is decimal integer. DBG> EVALUATE/HEX 18 + 5 00000017 ! 17 is hexadecimal integer. DBG> |
基数修飾子はデータ入力用の基数には影響を及ぼしません。
整変数の現在の値 ( または,整数型を持つプログラム記憶位置の内容 ) を別の基数で表示するには,EXAMINE コマンドに基数修飾子を指定します。次に例を示します。
DBG> EXAMINE X MOD4\X: 4398 ! 4398 は 10 進整数である。 DBG> EXAMINE/OCTAL . ! X は現在の値である。 MOD4\X: 00000010456 ! 10456 は 8 進整数である。 DBG> |
1 つまたは複数の整数リテラルを,現在の基数を変更せずに別の基数で入力するには,基数組み込みシンボル %BIN,%DEC,%HEX,%OCT のいずれかを使用します。基数組み込みシンボルは,次にある整数リテラルまたは括弧で囲まれた式内のすべての数値リテラルをそれぞれ 2 進数,10 進数,16 進数,または 8 進数として扱うようデバッガに指示します。これらのシンボルはデータ表示用の基数には影響を及ぼしません。次に例を示します。
DBG> SHOW RADIX input radix: decimal output radix: decimal DBG> EVAL %BIN 10 ! 2 進整数 10 を評価する。 2 ! 2 は 10 進整数である。 DBG> EVAL %HEX (10 + 10) ! 16 進整数 20 を評価する。 32 ! 32 は 10 進整数である。 DBG> EVAL %HEX 20 + 33 ! 20 を 16 進数,33 を 10 進数として扱う。 65 ! 65 は 10 進整数である。 DBG> EVAL/HEX %OCT 4672 ! 4672 を 8 進数として扱い 16 進数で表示する。 000009BA ! 9BA は 16 進数である。 DBG> EXAMINE X + %DEC 12 ! X のアドレスを 12 (10 進) バイト超えた MOD3\X+12: 493847 ! 記憶位置を検査する。 DBG> DEPOS J = %OCT 7777777 ! 8 進数値を格納する。 DBG> EXAMINE . ! その値を 10 進数を基数として表示する。 MOD3\J: 2097151 DBG> EXAMINE/OCTAL . ! その値を 8 進数を基数として表示する。 MOD3\J: 00007777777 DBG> EXAMINE %HEX 0A34D ! 記憶位置 A34D(16 進数) を検査する。 SHARE$LIBRTL+4941: 344938193 ! 344938193 は 10 進整数である。 DBG> |
注意 数字ではなく英字で始まる 16 進整数 ( 上記の例では A34D ) を指定する場合は,その前に 0 を付けます。0 を付けないと,デバッガはその整数をプログラム内で宣言されたシンボルとして解釈しようとします。 |
基数組み込みシンボルについての例は,
付録 B にもあります。
4.1.11 メモリ・アドレスの取得とシンボル化
変数名,行番号,ルーチン名,またはラベルなどのシンボリック・アドレス式に対応づけられたメモリ・アドレスまたはレジスタ名を判別するには,EVALUATE/ADDRESS コマンドを使用します。次に例を示します。
DBG> EVALUATE/ADDRESS X ! 変数名 2476 DBG> EVALUATE/ADDRESS SWAP ! ルーチン名 1536 DBG> EVALUATE/ADDRESS %LINE 26 1629 DBG> |
アドレスは,( 第 4.1.10 項 で定義したとおり ) 現在の基数で表示されます。アドレスを別の基数で表示したい場合は基数修飾子を指定できます。次に例を示します。
DBG> EVALUATE/ADDRESS/HEX X 000009AC DBG> |
変数がメモリ・アドレスではなくレジスタに対応づけられている場合, EVALUATE/ADDRESS コマンドは,基数修飾子が使用されているかどうかに関係なくレジスタの名前を表示します。次のコマンドは変数 K ( 非静的変数 ) がレジスタ R2 に対応することを示します。
DBG> EVALUATE/ADDRESS K %R2 DBG> |
EXAMINE コマンドおよび DEPOSIT コマンドと同様に,EVALUATE/ADDRESS は現在と前と次の論理要素組み込みシンボルの値を再設定します ( 第 4.1.8 項 を参照 )。 EVALUATE コマンドとは異なり,EVALUATE/ADDRESS は現在の値の組み込みシンボル %CURVAL およびバックスラッシュ (\) に影響を及ぼしません。
SYMBOLIZE コマンドの動作は EVALUATE/ADDRESS の動作とは逆ですが,現在,前,または次の論理要素組み込みシンボルに影響を及ぼしません。 このコマンドは,メモリ・アドレスまたはレジスタ名をシンボリック表現 ( パス名を含む ) に変換します。ただし,そのような表現が可能な場合です ( 第 5 章 にシンボル化を制御する方法が説明されています )。たとえば,次のコマンドは変数 K がレジスタ R2 に対応することを示します。
DBG> SYMBOLIZE %R2 address MOD3\%R2: MOD3\K DBG> |
省略時の設定では,シンボリック・モードが有効 ( SET MODE SYMBOLIC ) になります。 したがって,デバッガはシンボルがアドレスに使用できる場合,アドレスをすべてシンボルで表示します。たとえば,EXAMINE コマンドで数値アドレスを指定した場合,シンボリック情報が入手できるのであれば,そのアドレスは次のようにシンボリック形式で表示されます。
DBG> EVALUATE/ADDRESS X 2476 DBG> EXAMINE 2476 MOD3\X: 16 DBG> |
ただし,変数に対応するレジスタを指定した場合,EXAMINE コマンドはそのレジスタ名を変数名に変換しません。次に例を示します。
DBG> EVALUATE/ADDRESS K %R2 DBG> EXAMINE %R2 MOD3\%R2: 78 DBG> |
SET MODE NOSYMBOLIC コマンドを入力した場合にはシンボリック・モードが禁止され,デバッガはシンボリック名でなく数値アドレスを表示します。シンボル化を禁止した場合,デバッガは数字を名前に変換する必要がないので,コマンドの処理がいくらか速くなることがあります。 EXAMINE コマンドには,単一の EXAMINE コマンドのシンボル化を制御できる /[NO]SYMBOLIC 修飾子があります。次に例を示します。
DBG> EVALUATE/ADDRESS Y 512 DBG> EXAMINE 512 MOD3\Y: 28 DBG> EXAMINE/NOSYMBOLIC 512 512: 28 DBG> |
シンボリック・モードはまた,命令の表示にも影響を及ぼします。
たとえば Integrity サーバでは次のとおりです。
DBG> EXAMINE/INSTRUCTION .%PC HELLO\main\%LINE 8: add r34=200028, r1 DBG> EXAMINE/NOSYMBOL/INSTRUCTION .%PC 65969: add r34 = 200028, r1 DBG> |
目次 | 索引 |
|