library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


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 進数です。

VAX プロセッサでは BLISS と MACRO は例外で,これらの省略時の基数は 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>

シンボリック・モードはまた,命令の表示にも影響を及ぼします。

たとえば, VAX プロセッサでは次のとおりです。


DBG> EXAMINE/INSTRUCTION .%PC
MOD5\%LINE 14+2: MOVAL   L^MOD4\X,R11
DBG> EXAMINE/NOSYMBOL/INSTRUCTION .%PC
1538:   MOVAL   L^1080,R11
DBG>

4.2 変数の検査と値の格納

この節の例は EXAMINE コマンドと DEPOSIT コマンドでの変数の使用法を示しています。

言語が使用する変数の型,それらの型の名前,および式の中に各種の型を混在させることができる程度は,言語によって異なります。ここでは次の汎用型について説明します。

高級言語プログラム内の変数を検査および操作する場合の最も重要な関連事項は,デバッガがプログラム内の変数の名前,構文,型制約,有効範囲規則を認識するということです。したがって,EXAMINE コマンドまたは DEPOSIT コマンドで変数を指定する場合,ソース・コードに使用する構文と同じ構文を使用します。デバッガはその構文に従ってデータを処理し,表示します。同様に,変数に値を代入する場合も,デバッガはその言語の型指定規則に従います。ユーザが互換性のない値を格納しようとした場合には,診断メッセージが発行されます。以降の例には,そのような無効な操作とその結果生じる診断も含まれています。

DEPOSIT コマンド (またはその他のコマンド) を使用する場合,次の動作に注意してください。デバッガが重大度 I ( 情報 ) の診断メッセージが発行した場合でも,コマンドは実行されます ( DEPOSIT コマンドの場合は格納される )。デバッガが違法なコマンド行を強制終了するのは,メッセージの重大度が W ( 警告 ) 以上の場合だけです。

言語固有情報についての詳しい説明は,デバッガのオンライン・ヘルプを参照してください ( HELP Language と入力します )。

4.2.1 スカラ型

次の例は,EXAMINE,DEPOSIT,EVALUATE の各コマンドで整数型,実数型,型を使用した例です。

3 つの整変数のリストを検査します。


DBG> EXAMINE WIDTH, LENGTH, AREA
SIZE\WIDTH:   4 
SIZE\LENGTH:  7 
SIZE\AREA:   28
DBG>

整数式を格納します。


DBG> DEPOSIT WIDTH = CURRENT_WIDTH + 10
DBG>

デバッガは,代入する値が変数のデータ型の制約と大きさの制約に適合するかどうかを調べます。次の例は境界外の値 ( X は正の整数として宣言されている ) を格納しようとした場合です。


DBG> DEPOSIT X = -14
%DEBUG-I-IVALOUTBNDS, value assigned is out of bounds at or near DEPOSIT
DBG>

1 つの言語式の中に複数の数値型 ( 精度が異なる整数と実数 ) を混在させようとした場合,デバッガは通常,その言語の規則に従います。データ型が強力な言語では,そのような混在は好ましくありません。一部の言語では,実数値を整変数に格納することができます。ただし,実数値が整数に変換されます。次に例を示します。


DBG> DEPOSIT I = 12345
DBG> EXAMINE I
MOD3\I:  12345
DBG> DEPOSIT I = 123.45
DBG> EXAMINE I
MOD3\I:  123
DBG>

1 つの式に複数の数値型が混在する場合,デバッガは 第 4.1.6.2 項 に述べたような型変換を行います。次に例を示します。


DBG> DEPOSIT Y = 2.356     ! Y は G 浮動小数点数型である。
DBG> EXAMINE Y
MOD3\Y: 2.35600000000000
DBG> EVALUATE Y + 3
5.35600000000000
DBG> DEPOSIT R = 5.35E3    ! R は F 浮動小数点数型である。
DBG> EXAMINE R
MOD3\R:  5350.000
DBG> EVALUATE R*50
   267500.0
DBG> DEPOSIT I = 22222
DBG> EVALUATE R/I
   0.2407524
DBG>

次の例は,論理型変数を使用した操作を示しています。値 TRUE と FALSE が変数 WILLING と ABLE にそれぞれ代入されます。その後, EVALUATE コマンドでそれらの値の論理積を求めています。


DBG> DEPOSIT WILLING = TRUE
DBG> DEPOSIT ABLE = FALSE
DBG> EVALUATE WILLING AND ABLE
False
DBG>

4.2.2 ASCII 文字列型

ASCII 文字列の値を表示する場合,デバッガは値をその言語の構文に従って二重引用符 (") か一重引用符 (') で囲みます。次に例を示します。


DBG> EXAMINE EMPLOYEE_NAME
PAYROLL\EMPLOYEE_NAME:    "Peter C. Lombardi"
DBG>

文字列値 ( 1 文字だけの場合も含む ) を文字列変数に格納するには,その値を二重引用符 (") か一重引用符 (') で囲みます。次に例を示します。


DBG> DEPOSIT PART_NUMBER = "WG-7619.3-84"
DBG>

文字列がアドレス式の表す記憶位置に収まらない数の ASCII 文字 ( 各 1 バイト ) を持つ場合,デバッガは余分な文字を右から切り捨て,次のメッセージを発行します。


%DEBUG-I-ISTRTRU, string truncated at or near DEPOSIT

文字列の文字数が少ない場合,デバッガは ASCII スペース文字を挿入することによってその文字列の右側の残りの文字を埋めます。

4.2.3 配列型

配列集合体全体を検査したり,1 つの添字付き要素を検査したり, 1 つの断面 ( 要素の範囲 ) を検査したりできます。しかし,一度に値を格納できるのは 1 つの要素だけです。次の例は,配列を使用した代表的な操作を示しています。

次のコマンドは,1 次元の整数配列である配列変数 ARRX の全要素の値を表示します。


DBG> EXAMINE ARRX
MOD3\ARRX 
    (1):     42 
    (2):     17 
    (3):    278 
    (4):     56 
    (5):    113 
    (6):    149
DBG>

次のコマンドは,配列 ARRX の要素 4 の値を表示します。言語に応じて,添字付き要素を表すために括弧または大括弧が使用されます。


DBG> EXAMINE ARRX(4)
MOD3\ARRX(4):   56
DBG>

次のコマンドは,ARRX の 1 つの断面における全要素の値を表示します。この断面は要素 2〜要素 5 の要素範囲で構成されます。


DBG> EXAMINE ARRX(2:5)
MOD3\ARRX 
    (2):     17 
    (3):    278 
    (4):     56 
    (5):    113
DBG>

通常,検査する値の範囲は 2 つの値をコロンで区切って示します (value1:value2)。言語によっては,コロンの代わりに 2 つのピリオド (..) を使用できます。

一度に値を格納できる配列要素は 1 つだけです。1 つの DEPOSIT コマンドで配列断面または配列集合体全体へ値を格納することはできません。たとえば,次のコマンドは値 53 を ARRX の要素 2 へ格納します。


DBG> DEPOSIT ARRX(2) = 53
DBG>

次のコマンドは,実数の 2 次元配列 ( 1 次元あたり 3 つ ) である配列 REAL_ARRAY の全要素の値を表示します。


DBG> EXAMINE REAL_ARRAY
PROG2\REAL_ARRAY 
   (1,1):       27.01000 
   (1,2):       31.00000 
   (1,3):       12.48000 
   (2,1):       15.08000 
   (2,2):       22.30000 
   (2,3):       18.73000
DBG>

境界外の添字値へ格納しようとした場合,デバッガは診断メッセージを発行します。次に例を示します。


DBG> DEPOSIT REAL_ARRAY(1,4) = 26.13
%DEBUG-I-SUBOUTBND, subscript 2 is out of bounds, value is 4, 
bounds are 1..3
DBG>

上記の例では,診断メッセージのレベルが I ですので,格納操作が実行されました。このことは,(1,3) に隣接した配列要素,(2,1) の値が境界外の格納操作によって影響を受けた可能性があることを意味します。

ある配列の複数の構成要素に同じ値を格納するには,FOR または REPEAT などのループ・コマンドを使用できます。たとえば,値 RED を配列 COLOR_ARRAY の要素 1〜要素 4 へ代入するには次のようにします。


DBG> FOR I = 1 TO 4 DO (DEPOSIT COLOR_ARRAY(I) = RED)
DBG>

配列要素を 1 ステップずつ処理するには, 第 4.1.8 項 で説明したとおり,組み込みシンボルの (.) と (^) も使用できます。


前へ 次へ 目次 索引