日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V7.3-2
ライブラリ

タイトルページ
目次
まえがき
第 1 部:デバッガ概要
第 1 章:デバッガ概要
第 2 部:コマンド・インタフェース
第 2 章:デバッガの起動
第 3 章:プログラム実行の制御とモニタ
第 4 章:プログラム・データの検査と操作
第 5 章:プログラム内シンボルへのアクセス制御
第 6 章:ソース・コードの表示の制御
第 7 章:画面モード
第 3 部:DECwindows インタフェース
第 8 章:DECwindows Motifインタフェースの概要
第 9 章:デバッグ・セッションの開始と終了
第 10 章:デバッガの使用方法
第 4 部:PC クライアント・インタフェース
第 11 章:デバッガの PC クライアント/サーバ・インタフェースの概要
第 5 部:高度なトピック
第 12 章:ヒープ・アナライザの使用
第 13 章:その他の便利な機能
第 14 章:特殊なデバッグ
第 15 章:マルチプロセス・プログラムのデバッグ
第 16 章:ベクタ化されたプログラムのデバッグ
第 17 章:タスキング・プログラムのデバッグ
第 6 部:付録
付録 A :定義済みのキー機能
付録 B :組み込みシンボルと論理名
付録 C :各言語に対するデバッガ・サポートの要約
付録 D :EIGHTQUEENS.C
索引
PDF
OpenVMS ホーム

HP OpenVMS
デバッガ説明書


目次 索引

第 16 章
ベクタ化されたプログラムのデバッグ (VAX のみ)

本章では,ベクタ化されたプログラム ( VAX ベクタ命令を使用するプログラム ) に固有のデバッガの機能について説明します。他の章で説明するデバッガの機能のほかに,これらの機能も使用します。

本章では,以下のタスクを実行する方法を説明しています。

  • ユーザのシステムでベクタ型プロセッサを使用できるかどうかまたその使用方法に関する情報を表示する。

  • ベクタ命令の実行をブレークポイント,ウォッチポイントなどを使用して制御し,モニタする。

  • ベクタ制御レジスタ ( %VCR,%VLR,および %VMR ) とベクタ・レジスタ ( %V0 〜 %V15 ) を検査し,値を格納する。

  • ベクタ命令とそのオペランドを検査し,値を格納する。

  • ベクタ・レジスタまたはベクタ命令を調べるときに,マスクされた演算を実行して,特定のレジスタ要素だけを表示したり,ベクタ命令に関するマスクを上書きしたりする。

  • EXAMINE コマンドを使用するときに,ベクタ化されたプログラムに適切な複合形式の複合アドレス式を指定する。

  • ベクタ浮動小数点例外のデコード結果を表示する。

  • スカラ型プロセッサとベクタ型プロセッサの同期化を制御する。

  • CALL コマンドを使用してベクタ状態に影響を与えるルーチンを実行するときに,現在のベクタ状態を保存し,あとで復元する。

  • 画面モード表示を使用してベクタ・レジスタのデータを表示する。

ベクタ化された高級言語プログラムについての詳しい説明は,各言語のドキュメントを参照してください。ベクタ命令とベクタ・レジスタについての詳しい説明は,『VAX MACRO and Instruction Set Reference Manual』を参照してください。

注意

  1. コンパイラは,プログラム内で宣言されたシンボルにベクタ・レジスタを関連づけるためのシンボル・テーブル・データを生成しません。したがって,デバッグ・セッション中,ベクタ・レジスタはシンボル化できません。また,有効範囲 0 ( 呼び出しスタックの最上部にあるルーチンの有効範囲 ) にあるベクタ・レジスタにしかアクセスできません。

  2. 本章の例は,配列構文 ( たとえば,EXAMINE %V1(37) ) を使用してベクタ・レジスタの要素にアクセスする方法を示します。この構文は BLISS ではサポートされていません。 BLISS の場合は,SET LANGUAGE コマンドを使用して言語を一時的に他の言語 (Fortran など ) に変換し,その言語の配列構文を使用します。



SHOW PROCESS/FULL コマンドを使用すると,ユーザのシステムでベクタ型プロセッサを使用できるかどうかおよびその使用方法に関する情報を得ることができます。次に例を示します。


DBG> SHOW PROCESS/FULL
   .
   .
   .
Vector capable:            Yes 
Vector consumer:           Yes  Vector CPU time:       0 00:03:17.18 
Fast Vector context switches:   0  Slow Vector context switches:      0
   .
   .
   .
DBG>

「Vector capable」フィールドには,次のいずれかを指定できます。

Vector-Capable項目 説明
あり VAX システムにベクタ型プロセッサがあり,現在プログラムを実行中のプロセスがアクセスできる。
なし (保護されている) VAX システムにはベクタ型プロセッサがあるが,プログラムを実行しているプロセスはこのプロセッサにアクセスできない。
VVIEF VAX システムにはベクタ型プロセッサがない。 VAX ベクタ命令エミュレーション機能 (VVIEF) を実行中である。プログラムを実行しているプロセスは VVIEF にアクセスできる。
No VAX システムにはアクティブなベクタ型プロセッサがない。また,VVIEF はこのシステムにロードされていない。



16.2 ベクタ命令の実行の制御とモニタ

ここでは,次のタスクを実行する方法を説明します。

  • プログラムを次のベクタ命令または指定されたベクタ命令の中の 1 つまで実行 ( ステップ ) する。

  • 任意のベクタ命令または指定されたベクタ命令の中の 1 つを起動するブレークポイントまたはトレースポイントを設定する。

  • ベクタ・レジスタ内の変化をモニタするためのウォッチポイントを設定する。



16.2.1 次のベクタ命令までのプログラム実行

プログラム内で次のベクタ命令が検出されるまでそのプログラムを実行するには,STEP/VECTOR_INSTRUCTION コマンドを入力します。

STEP/INSTRUCTION=(opcode[,...]) コマンドを使用すれば,命令コード・リスト内にある命令コードを持つベクタ命令を次に検出するまでプログラムを実行することもできます。次に例を示します。


DBG> STEP/INSTRUCTION=(VLDL,VSTL,MOVL)

SET STEP コマンドを使用すると,次のように STEP コマンドの省略時の実行単位を変更できます。

  • STEP コマンドによって次のベクタ命令までプログラムが実行されることを省略時設定とするには,SET STEP VECTOR_INSTRUCTION コマンドを入力する。

  • STEP コマンドによって命令コードのリスト中の次の命令 ( ベクタ命令を含む ) までプログラムが実行されることを省略時設定とするには,SET STEP INSTRUCTION=(opcode[,...]) を入力する。



16.2.2 ベクタ命令に対するブレークポイントとトレースポイントの設定

プログラム内でベクタ命令が検出されたとき必ずブレークポイントまたはトレースポイントを検出するには,SET BREAK/VECTOR_INSTRUCTION または SET TRACE/VECTOR_INSTRUCTION コマンドを入力します。

このようなブレークポイントまたはトレースポイントを取り消すには, CANCEL BREAK/VECTOR_INSTRUCTION コマンドまたは CANCEL TRACE/VECTOR_INSTRUCTION コマンドを入力します。

SET BREAK コマンドや SET TRACE コマンドとともに /INSTRUCTION=(opcode[,...]) 修飾子を使用しても, 1 つまたは複数のベクタ命令上にブレークポイントやトレースポイントを設定できます。次にその例を示します。


DBG> SET BREAK/INSTRUCTION=(VVADDL,VVLEQL)

このようなブレークポイントやトレースポイントを取り消すには, CANCEL BREAK/INSTRUCTION コマンドまたは CANCEL TRACE/INSTRUCTION コマンドを使用します。

16.2.3 ベクタ・レジスタ上へのウォッチポイントの設定

ウォッチポイントは,ベクタ・レジスタ ( V0 〜 V15 ) とベクタ制御レジスタ ( VCR,VLR,および VMR ) に設定できます。これらのレジスタとその組み込みのデバッガ・シンボルについては, 第 16.3.1 項 を参照してください。

これらのウォッチポイントは,静的ウォッチポイントとして扱われ,設定されたあとは明示的に取り消すまで有効です。次の例では,ウォッチポイントが VCR レジスタに設定されます。


DBG> SET WATCH %VCR

レジスタ VMR と V0 から V15 の場合,ウォッチポイントはレジスタ集合体 ( レジスタのすべての要素 ) ,個々のレジスタ要素またはある範囲の要素 ( 断面 ) のどれかに設定できます。これは,配列変数にウォッチポイントを設定する場合と同じ方法で設定します。 第 3.4 節 を参照してください。

たとえば,次のコマンドは,レジスタ V5 の要素がどれか変化するとウォッチポイントが検出されるように設定します。


DBG> SET WATCH %V5

次のコマンドは,V2 の要素 37 が変化すると,ウォッチポイントが検出されるように設定します (Fortran 配列構文)。


DBG> SET WATCH %V2(37)

次のコマンドは,V2 で要素 5 〜 13 のどれかが変化するとウォッチポイントが検出されるように設定します。


DBG> SET WATCH %V2(5:13)



16.3 ベクタ・レジスタの検査と値の格納

ここでは,ベクタ制御レジスタ ( VCR,VLR および VMR ) とベクタ・レジスタ ( V0 〜 V15 ) を検査し,値を格納する方法を説明します。

16.3.1 ベクタ・レジスタとベクタ制御レジスタの指定

VAX アーキテクチャには,16 個のベクタ・レジスタ (V0 〜 V15) と 3 個のベクタ制御レジスタ ( VCR,VLR,VMR ) があります。デバッガ・コマンドでこれらのレジスタを参照する場合は,次の組み込みシンボル ( レジスタ名の前にパーセント記号 (%) がついてる ) を使用します。

シンボル 説明
%V0...%V15 ベクタ・レジスタ (V0...V15)
%VCR ベクタ数レジスタ (VCR)
%VLR ベクタ長レジスタ (VLR)
%VMR ベクタ・マスク・レジスタ (VMR)

どのデバッガ・レジスタ・シンボルでもそうであるように,プログラムがその名前にパーセント記号 (%) を宣言していない場合,このシンボルは省くことができます。

16.3.2 ベクタ数レジスタの検査と値の格納

ベクタ数レジスタ (VCR) は,IOTA 命令によって生成されたオフセット・ベクタの長さを指定します。

VCR の値は,0 から 64 までの整数です。省略時の設定では,デバッガは VCR をロングワード整数として扱います。 64 を超す値も VCR に格納できますが,その場合,デバッガは診断メッセージを発行して値がこのクラスの限界を超えていることを知らせます。

次のコマンド・シーケンスは,VCR の値を操作する方法を示しています。


DBG> EXAMINE %VCR
0\%VCR: 8
DBG> DEPOSIT %VCR = 4
DBG> EXAMINE %VCR
0\%VCR: 4
DBG>



16.3.3 ベクタ長レジスタの検査と値の格納

ベクタ長レジスタ (VLR) は,ベクタ命令が処理するベクタ・レジスタの最上位の要素を制限します。VLR の値は,0 から 64 までの整数です。この値は,処理されるレジスタ要素の数を指定します。要素 0 から指定できます。

デバッグ・セッションでは,VLR の現在の値が,EXAMINE デバッガ・コマンドまたは DEPOSIT デバッガ・コマンドでアクセスできるベクタ・レジスタの最上位の要素を制限します。

次のコマンド・シーケンスは,VLR の値を操作して,ベクタ・レジスタ V1 の別の要素数を検査する方法を示しています。


DBG> EXAMINE %VLR
0\%VLR: 4
DBG> EXAMINE %V1
0\%V1 
    (0):       12 
    (1):        3 
    (2):      138 
    (3):       51
DBG> DEPOSIT %VLR = 3
DBG> EXAMINE %VLR
0\%VLR: 3
DBG> EXAMINE %V1
0\%V1 
    (0):       12 
    (1):        3 
    (2):      138
DBG>

0 から VLR--1 までの範囲にないレジスタ要素にはアクセスできません。次の例では,EXAMINE コマンドがレジスタ VI の要素 7 を指定していますが,これは境界外です ( Fortran 配列構文 )。


DBG> EXAMINE %VLR
0\%VLR: 3
DBG> EXAMINE %V1(7)
%DEBUG-E-VECTSUBRNG, vector register subscript out of bounds, 
                     bounds are 0..2
DBG>

省略時の設定では,デバッガが VLR をロングワード整数として扱います。 64 を超えた値を VLR に格納できますが,その場合,デバッガは診断メッセージを発行して値が境界外であることを知らせます。

16.3.4 ベクタ・マスク・レジスタの検査と値の格納

ベクタ・マスク・レジスタ (VMR) は,ベクタ命令がベクタ・レジスタ・オペランドの特定の要素だけに演算を行うために使用するマスク ( ビット・パターン ) を指定します。マスクされたベクタ命令は,VMR によってマスクされたベクタ・レジスタの要素には演算を行いません。

VMR には 0 から 63 までの番号がついた 64 個のビット (1 クォドワード) が含まれています。各ビットはベクタ・レジスタ内の要素と対応しています。特定のビットの値 (0 または 1) は,マスクされた演算の場合に対応するレジスタ要素の演算を行うかどうかを決定します。

マスクされた演算については, 第 16.4.1 項第 16.5 節 を参照してください。ここでは,VMR の値を表示したり変更する方法だけを説明します。

VMR の 1 つまたは複数の要素 (ビット) を検査するには,配列変数を検査する場合と同じ方法を使用します。 第 4.2.3 項 を参照してください。

たとえば,次のコマンドの出力は,VMR のビット 5 がセットされていることを示しています (Fortran 配列構文)。


DBG> EXAMINE %VMR(5)
0\%VMR(5):      1
DBG>

次のコマンドは,VMR のビット 4 〜 6 の値を表示します。ビット 4 と 5 がセットされ,ビット 6 はクリアされます。


DBG> EXAMINE %VMR(4:6)
0\%VMR
    (4):        1
    (5):        1
    (6):        0
DBG>

省略時の設定では,添字を指定せずに VMR を検査すると,デバッガはレジスタの値を 16 進形式のクォドワード整数として表示します。その結果,出力表示のサイズを削減できます。次に例を示します。


DBG> EXAMINE %VMR
0\%VMR
    (0):        0FFFFFFF FFFFFFFF
DBG>

EXAMINE/BIN %VMR コマンドまたは EXAMINE %VMR(0:63) コマンドを指定すると, VMR の各ビットの値を 64 行の配列形式で表示できます。

配列変数を使用したときと同様に,VMR への値の格納は一度に 1 ビットずつできます。次に例を示します。


DBG> EXAMINE %VMR(37)
0\%VMR(37):      1
DBG> DEPOSIT %VMR(37) = 0
DBG> EXAMINE %VMR(37)
0\%VMR(37):      0
DBG>

DEPOSIT/QUADWORD コマンドを使用すると,クォドワード整数値を集合体全体に格納することもできます。次に例を示します。


DBG> DEPOSIT/QUADWORD %VMR = %HEX 0FFFFF
DBG> EXAMINE %VMR
0\%VMR
    (0):        00000000 000FFFFF
DBG>

言語式で VMR の要素を指定する場合,VMR はビットの配列であることに注意してください。そのため,まず C または BLISS などのビット演算が可能な言語に一時的に設定しなければならないこともあります。次に例を示します。


DBG> SET LANGUAGE C
DBG> DEFINE/VALUE K = 0
DBG> FOR I=0 TO 63 DO (IF %VMR[I] == 1 THEN (DEF/VAL K = K + 1))



16.3.5 ベクタ・レジスタ (V0 〜 V15) の検査と値の格納

V0 から V15 までの 16 個のベクタ・レジスタがあります。各ベクタ・レジスタは番号 0 から 63 が割り当てられた 64 個の要素を持っています。また,各要素は64 ビット (1 クォドワード) から構成されます。

ベクタ・レジスタの 1 つまたは複数の要素を検査するには,配列変数の検査の場合と同じ方法を使用します ( 第 4.2.3 項 を参照 )。本項では,例に Fortran 配列構文を使用します。


DBG> EXAMINE %V3              !V3 のすべての要素を検査する 
DBG> EXAMINE %V3(27)          !V3 の要素 27 の要素を検査する 
 
DBG> EXAMINE %V3(3:14)        !V3 の要素 3 から 14 までを検査 
する 
DBG> EXAMINE %V0(2),%V3(1:4)  !V0 の要素 2 と V3 の要素 1 から 
 4 までを 
                                   !検査する 

レジスタ要素の値は,配列変数で使用するものと似た添字付き形式で表示されます。たとえば,次のコマンドは,レジスタ V1 の要素 1 から 3 までの値を表示します。


DBG> EXAMINE %V1(1:3)
0\%V1 
    (1):        3 
    (2):      138 
    (3):       51
DBG>

ある範囲のベクタ・レジスタは検査できません。たとえば,次のコマンドは無効です。


DBG> EXAMINE %V0:%V3
DBG> EXAMINE %V2(7):%V3(12)

配列変数と同様に,値をベクタ・レジスタの 1 つだけの要素に一度に格納できます。たとえば,次のコマンドは整数値 8531 を VO の要素 9 に格納します。


DBG> DEPOSIT %V0(9) = 8531

ベクタ長レジスタ (VLR) の現在の値は,検査または格納できる最高のレジスタ要素を制限します ( 第 16.3.3 項 を参照 )。したがって,次のコマンドは同じ機能を持っています。


DBG> EXAMINE %V1
DBG> EXAMINE %V1(0:%VLR-1)

式 0:%VLR--1 は,VLR の現在の値によって示された範囲内のレジスタ要素を指定します。

省略時の設定では,デバッガはベクタ・レジスタの各要素をロングワード整数として扱い,現在の基数で値を表示します。次に例を示します。


DBG> EXAMINE %V3(27)
0\%V3(27):      5983
DBG> DEPOSIT %V3(27) = 3625
DBG> EXAMINE %V3(27)
0\%V3(27):      3625
DBG>

ただし,ベクタ命令のコンテキストで調べられるレジスタ値 ( 命令オペランド ) は,その命令に適切なデータ型で表示されます。 第 16.4.1 項 を参照してください。

ベクタ・レジスタの要素の全 ( クォドワード ) 値をクォドワード整数として表示するには, EXAMINE/QUADWORD コマンドを使用します。同様に,クォドワード整数値をレジスタ要素に格納するには, DEPOSIT/QUADWORD コマンドを使用します。

また,EXAMINE コマンドや DEPOSIT コマンドに関連した他の型の修飾子 ( たとえば /FLOAT ) を使用すると,省略時の型を上書きできます。次に例を示します。


DBG> EXAMINE %V5(2)
0\%V5(2):      0
DBG> EXAMINE/D_FLOAT %V5(2)
0\%V5(2):      0.0000000000000000
DBG>

言語式での集合体のデータ構造の使用に関する制限事項に従えば,言語式でレジスタ・シンボルを使用できます ( 第 4.1.6.1 項 を参照)。たとえば,次の式は有効です ( Fortran 構文 )。


DBG> EVALUATE %V0(4) .EQ. %V1(4)

ただし,次の式は,2 つ以上のレジスタ要素を指定しているので無効です。


DBG> EVALUATE %V0 .EQ. %V1


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項