HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
高級言語では,DEPOSIT コマンドはほとんどの場合,変数に新しい値を代入するために使用されます。このコマンドは,多くのプログラミング言語の代入文と似ていて,次の構文をとります。
DEPOSIT address-expression = language-expression |
たとえば次の DEPOSIT コマンドは整変数 X に値 23 を代入します。
DBG> EXAMINE X MOD3\X: 17 DBG> DEPOSIT X = 23 DBG> EXAMINE X MOD3\X: 23 DBG> |
一般的には,DEPOSIT コマンドは言語式を評価し,その結果の値をアドレス式で表されたプログラム記憶位置に格納します。
DEPOSIT コマンドを入力すると,デバッガは次のことを行います。
その言語の規則で許されていれば,デバッガは格納操作時に型変換を行うことがあるので注意してください。たとえば,X が整変数である場合,次の例では実数値 2.0 は整数値 2 へ変換され,その後で X に代入されます。
DBG> DEPOSIT X = 2.0 DBG> EXAMINE X MOD3\X: 2 DBG> |
通常,デバッガは現在の言語の代入規則に従おうとします。
4.1.5 アドレス式とそれに対応した型
プログラム内で宣言したシンボル (変数名,ルーチン名など) は,シンボリック・アドレス式です。それらはメモリ・アドレスかレジスタを表します。シンボリック・アドレス式 (本章では「シンボリック名」とも呼ぶ) はコンパイラ生成型を持ち,デバッガはシンボリック名に対応する型と記憶位置が分かっています。シンボリック名からメモリ・アドレスとレジスタ名を取得する方法と,プログラム記憶位置をシンボル化する方法については, 第 4.1.11 項 を参照してください。
シンボリック名には次のカテゴリがあります。
シンボリック名を持たないプログラム記憶位置は,コンパイラ生成型に対応づけられません。そのような記憶位置を検査したりそこに値を格納したりできるようにするため,デバッガはそれらの記憶位置を省略時の型であるロングワード整数へ対応づけます。シンボリック名を持たない記憶位置を指定した場合には, EXAMINE コマンドは指定されたアドレスから始まる 4 バイトの内容を表示し,表示される情報を整数値として編集します。次の例では,メモリ・アドレス 926 はシンボリック名に対応づけられていません (EXAMINE コマンドを実行した場合,このアドレスはシンボル化されないことに注意してください)。したがって, EXAMINE コマンドはそのアドレスの値をロングワード整数として表示します。
DBG> EXAMINE 926 926: 749404624 DBG> |
省略時の設定では,シンボリック名を持たないプログラム記憶位置へ最高 4 バイトの整数データを格納できます。このデータはロングワード整数として編集されます。次に例を示します。
DBG> DEPOSIT 926 = 84 DBG> EXAMINE 926 926: 84 DBG> |
シンボリック名を持たない記憶位置を検査する方法とそこへ値を格納する方法については, 第 4.5 節 で説明します。
EXAMINE コマンドと DEPOSIT コマンドには型修飾子 ( /ASCII:n,/BYTE など ) が使用でき,これらを使用すればプログラム記憶位置と対応した型を上書きすることができます。これは,記憶位置の内容を別の型で解釈し表示する場合や,特定の型の値を別の型に対応づけられた記憶位置に格納したい場合のどちらにも役立ちます。型を上書きする方法については 第 4.5 節 で説明します。
4.1.6 言語式の評価
言語式は,1 つまたは複数のシンボル,リテラル,および演算子を組み合わせたものからなり,現在の言語の構文と現在の基数で 1 つの値として評価されます。現在の言語と現在の基数は,それぞれ 第 4.1.9 項 と 第 4.1.10 項 に定義されています。次のデバッガ・コマンドと構造は言語式を評価します。
この説明は言語式を評価するすべてのコマンドと構造に対して当てはまりますが,特に EVALUATE コマンドの使用を念頭に置いています。
EVALUATE コマンドは 1 つまたは複数の言語式を現在の言語の構文と現在の基数で評価し,その結果の値を表示します。このコマンドは次の形式をとります。
EVALUATE language-expression[,...] |
EVALUATE コマンドの使用例の1つは,プログラムに関連のない算術演算を行うために使用するものです。次に例を示します。
DBG> EVALUATE (8+12)*6/4 30 DBG> |
デバッガは,言語式を評価する場合,現在の言語の演算子プロシージャの規則を使用します。
変数とその他の構造を含む言語式を評価することもできます。たとえば,次の EVALUATE コマンドは整変数 X の現在の値から 3 を差し引き,その結果に 4 を掛けた結果の値を表示します。
DBG> DEPOSIT X = 23 DBG> EVALUATE (X - 3) * 4 80 DBG> |
しかし,関数呼び出しを含む言語式を評価することはできません。たとえば,PRODUCT が 2 つの整数を掛け合わせる関数である場合に, EVALUATE PRODUCT(3,5) コマンドを入力することはできません。プログラムで関数の戻り値を変数に代入する場合は,その変数の結果の値を検査することができます。
式にさまざまなコンパイラ生成型のシンボルが入っている場合,デバッガは式を評価するために現在の言語の型変換規則を使用します。型に互換性がなければ,診断メッセージが発行されます。言語式内での演算子とその他の構造のデバッガ・サポートはデバッガのオンライン・ヘルプに各言語ごとにリストしてあります (HELP Language を入力します)。
組み込みシンボル %CURVAL は 現在の値(EVALUATE コマンドまたは EXAMINE コマンドが最後に表示した値,あるいは DEPOSIT コマンドによって格納された値) を表します。バックスラッシュ (\) もまた,その状況で使用された場合は現在の値を表します。次に例を示します。
DBG> EXAMINE X MOD3\X: 23 DBG> EVALUATE %CURVAL 23 DBG> DEPOSIT Y = 47 DBG> EVALUATE \ 47 DBG> |
言語式内では,プログラムのソース・コード内で変数を使用するのとほぼ同じように変数を使用できます。
したがって,デバッガは通常,言語式内で使用された変数をその変数のアドレスとしてではなく,その変数の現在の値として解釈します。次に例を示します (X は整変数)。
DBG> DEPOSIT X = 12 ! 値 12 を X に代入する。
DBG> EXAMINE X ! X の値を表示する。
MOD4\X: 12
DBG> EVALUATE X ! X の値を評価して表示する。
12
DBG> EVALUATE X + 4 ! X の値に 4 を加える。
16
DBG> DEPOSIT X = X/2 ! X の値を 2 で割り,その結果の値を
! X に代入する。
DBG> EXAMINE X ! X の新しい値を表示する。
MOD4\X: 6
DBG>
|
上記の例で示したような言語式内での変数の使用は,通常,単一値の非複合変数に限られます。通常,複数値の複合変数 ( 配列やレコードなど ) を言語式内で指定できるのは,その構文が単一値 ( 集合体の 1 要素 ) だけを参照するための構文である場合だけです。たとえば,ARR が整数配列の名前である場合,次のコマンドは無効です。
DBG> EVALUATE ARR %DEBUG-W-NOVALUE, reference does not have a value DBG> |
しかし,次のコマンドは配列の 1 要素だけを参照しているので有効です。
DBG> EVALUATE ARR(2) ! 配列 ARR の要素 2 を評価する。 37 DBG> DEPOSIT K = 5 + ARR(2) ! 2 つの整数値の合計を DBG> ! 1 つの整変数に格納する。 |
現在の言語が BLISS の場合,デバッガは言語式内の変数をその変数のアドレスとして解釈します。変数内に格納されている値を示すには,内容演算子 (ピリオド (.)) を使用しなければなりません。たとえば,言語が BLISS に設定されている場合は次のとおりです。
DBG> EXAMINE Y ! Y の値を表示する。 MOD4\Y: 3 DBG> EVALUATE Y ! Y のアドレスを表示する。 02475B DBG> EVALUATE .Y ! Y の値を表示する。 3 DBG> EVALUATE Y + 4 ! Y のアドレスに 4 を加算し 02475F ! その結果の値を表示する。 DBG> EVALUATE .Y + 4 ! Y の値に 4 を加算し 7 ! その結果の値を表示する。 DBG> |
どの言語の場合も,変数のアドレスを取得するには, 第 4.1.11 項 に述べるように EVALUATE/ADDRESS コマンドを使用します。 EVALUATE コマンドと EVALUATE/ADDRESS コマンドは,言語が BLISS に設定してある場合,どちらもアドレス式のアドレスを表示します。
4.1.6.2 デバッガによる数値の型変換
精度が異なる複数の数値型が入っている言語式を評価する場合,デバッガは評価の前にまず精度が低いほうの型を高い精度へ変換します。次の例では,デバッガは加算を行う前に整数 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 項 を参照)。修飾子の指定する型によって要素のデータ境界が判別され,したがって論理的後続データと論理的先行データも判別されます。
| 前へ | 次へ | 目次 | 索引 |