日本-日本語

製品  >  ソフトウェア  >  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
デバッガ説明書


目次 索引



EXAMINE コマンドを使用すると,各種の形式の複合アドレス式 ( あるアドレスからのバイト・オフセットを含むアドレス式 ) を指定できます。たとえば,X が整変数であると,次の EXAMINE コマンドは,X のアドレスから 6 バイト先の記憶位置に現在格納されている値を表示します。


DBG> EXAMINE X + 6
MOD3\X+6:  274903
DBG>

本節で使用する例は,ベクタ化されたプログラムに適した形式の複合アドレス式を指定する方法を示しています。

次の例は,VSCATL 命令の効果をチェックできる方法を示しています。ここに示す命令は,Fortran プログラムからデコードされたものです。


DBG> EXAMINE %VLR
0\%VLR: 5
DBG> EXAMINE/OPERANDS .%PC   (1)
PROG1$MAIN\%LINE 9+32: VSCATL   V7,W^-804(R11),V9 
V7 contains: 
        0\%V7(0):  11   (2)
        0\%V7(1):  13 
        0\%V7(2):  15 
        0\%V7(3):  17 
        0\%V7(4):  19 
 
     W^-804(R11)PROG1$MAIN\ARRX(1) (address 1820) contains 0   (3)
V9 contains: 
        0\%V9(0):  0   (4)
        0\%V9(1):  8 
        0\%V9(2):  16 
        0\%V9(3):  24 
        0\%V9(4):  32
DBG> SHOW SYMBOL/TYPE ARRX   (5)
data PROG1$MAIN\ARRX 
 array descriptor type, 1 dimension, bounds: [1:200], size: 800 bytes 
 cell type: atomic type, longword integer, size: 4 bytes
DBG> EXAMINE ARRX(1) + .%V9(0:%VLR-1)   (6)
PROG1$MAIN\ARRX(1):       0 
PROG1$MAIN\ARRX(3):       0 
PROG1$MAIN\ARRX(5):       0 
PROG1$MAIN\ARRX(7):       0 
PROG1$MAIN\ARRX(9):       0
DBG> STEP/INSTRUCTION   (7)
stepped to PROG1$MAIN\%LINE 9+40: MOVZBL   I^#64,AP
DBG> EXAMINE ARRX(1) + .%V9(0:%VLR-1)   (8)
PROG1$MAIN\ARRX(1):       11 
PROG1$MAIN\ARRX(3):       13 
PROG1$MAIN\ARRX(5):       15 
PROG1$MAIN\ARRX(7):       17 
PROG1$MAIN\ARRX(9):       19
DBG>

次の番号は,上記の例の番号に対応しています。

  1. EXAMINE/OPERANDS コマンドは,VSCATL 命令が実行されようとしていることを示す。この命令は,ロングワード整数 (4 バイト) のデータをレジスタ V7 からメモリ記憶位置に転送する。これらの記憶位置は,レジスタ V9 に含まれるオフセット値を基底アドレスに追加することで決定される。

  2. レジスタ V7 には,メモリに転送するロングワード整数値が入っている。

  3. VSCATL 命令に対するオペランドとして指定された基底アドレスは, ARRX(1) のようにシンボル化されている。 ARRX(1) は配列 ARRX の要素 1 を表している。

  4. レジスタ V9 には,メモリ内の各ターゲット・ベクタ要素の基底アドレスからのバイト単位のオフセットが入っている。

  5. SHOW SYMBOL/TYPE コマンドは,ARRX が連続したロングワード整数の配列であることを示す。

  6. EXAMINE コマンドは,メモリ内のターゲット・ベクタ要素の値を表示する。指定されたアドレス式は,レジスタ V9 に入っているオフセット値を使用して,メモリ内の連続したベクタ要素の開始アドレスを,基底アドレスである ARRX(1) からの相対値として設定する。デバッガは,配列 ARRX の要素に対してメモリ内のベクタ要素の記憶位置をシンボル化する。この例では,ベクタ要素が 8 バイト置きに開始し,配列 ARRX の要素と 1 つ置きに対応している。 VSCATL 命令はまだ実行されていないので,メモリ内のベクタ要素の値はどれも 0 である。

  7. STEP/INSTRUCTION コマンドは VSCATL 命令を実行し,次の命令 MOVZBL で実行を中断する。

  8. の項目と同様に,EXAMINE コマンドはメモリ内のターゲット・ベクタ要素の値を表示する。ここで,メモリの内容が,値がレジスタ V7 から転送されていることを示す。

次の例は,EXAMINE コマンドでもう少し複雑なベクタ・アドレス式を指定する方法を示しています。

配列 ARRZ が連続したクォドワード整数 ( 8 バイト ) 要素を持っているものとします。例の 4 つめの EXAMINE コマンドは,メモリ内の要素 ARRZ(1) で始まるベクタ要素の値を表示します。先の例の場合と同様に,デバッガはベクタ要素の記憶位置を配列要素でシンボル化します。一連のベクタ要素の,ARRZ(1) に対する相対記憶位置は,レジスタ V1 とレジスタ V3 に入っている値を加えて求め,特定の要素に対する結合オフセットを指定します。ベクタ要素が表示される順番は,最初に指定されたレジスタ (V1) の各値に関して,最後に指定したレジスタ ( V3(0:2) ) のすべての値を振り当てる形になります。この例では,すべてのベクタ要素の値が 0 です。


DBG> EXAMINE %VLR
0\%VLR: 4
DBG> EXAMINE %V1
0\%V1 
     (0):        0 
     (1):        4 
     (2):        8 
     (3):       12
DBG> EXAMINE %V3
0\%V1 
     (0):        0 
     (1):        8 
     (2):       16 
     (3):       24
DBG> EXAMINE ARRZ(1) + .%V1(0:3) + .%V3(0:2)
PROG4$MAIN\ARRZ(1):       0    ! ARRZ(1)+0+0 
PROG4$MAIN\ARRZ(2):       0    ! ARRZ(1)+0+8 
PROG4$MAIN\ARRZ(3):       0    ! ARRZ(1)+0+16 
PROG4$MAIN\ARRZ(1)+4:     0    ! ARRZ(1)+4+0 
PROG4$MAIN\ARRZ(2)+4:     0    ! ARRZ(1)+4+8 
PROG4$MAIN\ARRZ(3)+4:     0    ! ARRZ(1)+4+16 
PROG4$MAIN\ARRZ(2):       0    ! ARRZ(1)+8+0 
PROG4$MAIN\ARRZ(3):       0    ! ARRZ(1)+8+8 
PROG4$MAIN\ARRZ(4):       0    ! ARRZ(1)+8+16 
PROG4$MAIN\ARRZ(2)+4:     0    ! ARRZ(1)+12+0 
PROG4$MAIN\ARRZ(3)+4:     0    ! ARRZ(1)+12+8 
PROG4$MAIN\ARRZ(4)+4:     0    ! ARRZ(1)+12+16
DBG>



16.7 ベクタ浮動小数点例外の結果の表示

ベクタ命令がベクタ要素内で浮動小数点例外を生成すると,例外結果がデスティネーション・レジスタの対応する要素にエンコードされます。

このような場合,EXAMINE/FLOAT コマンドを使用すると,関連したレジスタ要素にデコードした例外メッセージが表示されます。この方法を使用すると, 第 16.8 節 に示すとおりに実行要求をまだ保留している浮動小数点例外を識別できます。次の例は,ベクタ命令がレジスタ V5 の要素 2 の浮動小数点ゼロ除算例外を生成したことを示しています。


DBG> EXAMINE/FLOAT %V5
0\%V5 
     (0):   297.2800 
     (1):   87.41499 
     (2):   Reserved operand, encoded as floating divide by zero 
     (3):   173.8650
DBG>

プログラムがベクタ・レジスタの値をメモリにコピーすれば,ベクタ・レジスタの場合と同様に,デコードされた情報を表示するために EXAMINE/FLOAT コマンドをそのメモリ記憶位置に適用できます。

次の表にベクタ浮動小数点例外ごとにデコードされたデバッガ・メッセージを示します。

例外 デバッガ・メッセージ
浮動小数点アンダフロー 予約オペランド。浮動小数点アンダフローとしてエンコードされる。
浮動小数点ゼロ除算 予約オペランド。浮動小数点ゼロ除算としてエンコードされる。
浮動小数点予約オペランド 予約オペランド。浮動小数点予約オペランドとしてエンコードされる。
浮動小数点オーバフロー 予約オペランド。浮動小数点オーバフローとしてエンコードされる。



16.8 スカラとベクタの同期化の制御

高い性能を達成するため,VAX のスカラ型プロセッサとベクタ型プロセッサはできるだけ並行して稼働します。スカラ型プロセッサは,すべてのベクタ命令をベクタ型プロセッサに渡し,スカラ命令の実行を続けます。その間にベクタ型プロセッサはベクタ命令を実行しています。

場合によっては,2 つのプロセッサの動作の同期をとらなければならないことがあります。正しいプログラムの実行結果を得るには,SYNC,MSYNC,および VSYNC などの同期化命令を使用することにより,プログラムが特定の動作を完了させてからでないと,他の動作を開始しないようにします。これらの命令とスカラとベクタの同期化についての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。

プログラムがコンパイラ ( たとえば,HP Fortran コンパイラ ) によってベクタ化されると,必要な同期化命令が自動的に生成されます。ただし,MACRO のプログラマは同期化命令を明示的に作成しなければなりません。

省略時の設定では,デバッガはプログラム ( 内部目的で実行しているものを除く ) の実行中は,スカラとベクタの同期化を行いません。プログラムはデバッガの制御を受けていないかのように実行し,同期化はプログラムによって完全に制御されています。この省略時の動作モードは, SET VECTOR_MODE NOSYNCHRONIZED コマンドによって設定されます。

デバッガを省略時の非同期化モードで使用すると,プログラムの実行がブレークポイント,ウォッチポイント,または STEP コマンドの完了時に中断されたときに,特定のベクタ動作が割り込みをかけられた状態になることがあります。次に例を示します。

  • ベクタ命令によって作成された例外が実行要求を保留にすることがある。

  • ベクタ・レジスタとスカラ・メモリの間でデータを転送する動作が完了していない。したがって,メモリまたはベクタ・レジスタの内容を検査すると,予想外の結果を生じることがある。

このような場合に混乱しないようにするには,SYNCHRONIZE VECTOR_MODE コマンドを入力します。このコマンドは,スカラ型プロセッサとベクタ型プロセッサをただちに同期化します。このコマンドを入力するのは,実行が一時停止しているプログラム内の記憶位置で SYNC 命令と MSYNC 命令を入力するのと同じことです。これは,次のような効果があります。

  • ベクタ命令によって生じ,まだ実行要求を保留中の例外に対して,ただちに実行が要求される。保留中の例外の実行要求を行うと,例外ブレークポイントまたはトレースポイント ( 設定してある場合 ) が検出されるか,例外ハンドラ ( プログラムのその記憶位置で利用できるものがある場合 ) が起動される。

  • ベクタ・レジスタと汎用レジスタまたはメモリの間で行われる読み込み動作または書き込み動作がただちに完了する。すなわち,まだ実行されていたベクタ・メモリ命令が実行を完了する。

次の MACRO 例は,SYNCHRONIZE VECTOR_MODE コマンドの機能を示しています。


DBG> STEP   (1)
stepped to .MAIN.\SUB\%LINE 99 
    99:         VVDIVD  V1,V0,V2
DBG> STEP   (2)
stepped to .MAIN.\SUB\%LINE 100 
   100:         CLRL    R0
DBG> EXAMINE/FLOAT %V2   (3)
0\%V2 
    [0]:        13.53400 
    [1]:        Reserved operand, encoded as floating divide by zero 
    [2]:        247.2450
   .
   .
   .
DBG> SYNCHRONIZE VECTOR_MODE   (4)
%SYSTEM-F-VARITH, vector arithmetic fault, summary=00000002, 
                  mask=00000004, PC=000002E1, PSL=03C00010 
break on unhandled exception preceding .MAIN.\SUB\%LINE 100 
   100:         CLRL    R0
DBG>

次の番号は,上記の例の番号に対応しています。

  1. この STEP コマンドは,プログラムの実行を VVDIVD 命令が実行される直前の行 99 で中断する。この例では,命令が浮動小数点ゼロ除算例外を発生するものと想定する。

  2. この STEP コマンドは,VVDIVD 命令を実行する。ただし,プログラムの実行中に,この時点では例外の実行要求は行われない。

  3. EXAMINE/FLOAT コマンドは,デコードされた例外メッセージをデスティネーション・レジスタ V2 の要素 1 に表示する ( 第 16.7 節 を参照 )。その結果,浮動小数点ゼロ除算例外が発生し,実行要求が保留になっていることを確認する。

  4. SYNCHRONIZE VECTOR_MODE コマンドは,保留中のベクタ例外を即座に実行するように要求する。プログラムがベクタ・プロセッサのハードウェアでなく VVIEF を使用している場合は,異なる診断メッセージが発行されることがあるので注意する。

SYNCHRONIZE VECTOR_MODE コマンドを使用する代わりに, SET VECTOR_MODE SYNCHRONIZED コマンドを入力すると,同期化ベクタ・モードでデバッガを稼働することもできます。このコマンドを使用すると,デバッガは,ベクタ命令が実行されるたびに,スカラ型プロセッサとベクタ型プロセッサ間の同期を自動的にとります。また,ベクタ命令を実行するたびにそのあとで SYNC 命令を実行し,さらにメモリにアクセスするベクタ命令を実行したあとで MSYNC 命令を実行します。その結果,次のように同期化の対象となっているベクタ命令に関連したすべての処理が終了します。

  • ベクタ命令によって発生した例外の実行要求は,次のスカラ命令が実行される前に行われる。保留中の例外の実行要求を行うと,ブレークポイントまたはトレースポイント ( 設定した場合 ) が検出されるか,または例外ハンドラ ( プログラムのその記憶位置で使用できるものがある場合 ) が起動される。

  • ベクタ・レジスタと汎用レジスタまたはメモリの間で行われる読み込み動作または書き込み動作が次のスカラ命令を実行する前に完了する。

次の例は,SET VECTOR_MODE SYNCHRONIZED コマンドを上記の例で使用したのと同じ命令ストリーム上で実行した場合の影響を示しています。


DBG> SHOW VECTOR_MODE
Vector mode is nonsynchronized
DBG> SET VECTOR_MODE SYNCHRONIZED   (1)
DBG> SHOW VECTOR_MODE
Vector mode is synchronized
DBG> STEP   (2)
stepped to .MAIN.\SUB\%LINE 99 
    99:         VVDIVD  V1,V0,V2
DBG> STEP   (3)
%SYSTEM-F-VARITH, vector arithmetic fault, summary=00000002, 
                  mask=00000004, PC=000002E1, PSL=03C00010 
break on unhandled exception preceding .MAIN.\SUB\%LINE 100 
   100:         CLRL    R0
DBG>

次の番号は,上記の例の番号に対応しています。

  1. SET VECTOR_MODE SYNCHRONIZED コマンドを使用すると,ベクタ命令が実行されるたびに,デバッガはスカラ型プロセッサとベクタ型プロセッサの自動同期化を指示する。

  2. この STEP コマンドは VVDIVD 命令が実行される直前の行 99 でプログラムの実行を中断する。前の例と同様に,命令が浮動小数点ゼロ除算例外を発生したものとみなす。

  3. この STEP コマンドが VVDIVD 命令を実行し,この命令が例外を発生する。デバッガは同期化ベクタ・モードで動作中であるので,ベクタ例外の実行要求が直ちに行われる。

SYNCHRONIZE VECTOR_MODE や SET VECTOR_MODE SYNCHRONIZED のほかにも,同期化に影響を及ぼすデバッガ・コマンド ( SET WATCH など ) がいくつかあります。



16.9 プログラムのベクタ状態に影響を与えることがある呼び出しルーチン

CALL コマンドとともに /[NO]SAVE_VECTOR_STATE 修飾子を指定すると,ベクタ型プロセッサの現在の状態を保存し,ルーチンが呼び出されたときに復元するかどうかを制御できます。

VAX ベクタ・プロセッサの状態は,次のもので決まります。

  • ベクタ・レジスタとベクタ制御レジスタの値

  • 実行要求を保留中にすることがあるベクタ例外 ( ベクタ命令の実行によって発生する例外 )

CALL コマンドを使用してルーチンを実行すると,ルーチンの実行により,ベクタ・プロセッサの状態が次の動機により変化することがあります。

  • ベクタ・レジスタまたはベクタ制御レジスタの値の変更による

  • ベクタ例外の発生

  • CALL コマンドを実行したときに保留中だったベクタ例外の実行要求の発生

CALL/SAVE_VECTOR_STATE コマンドは,CALL コマンドを実行する前に存在したベクタ型プロセッサの状態を,呼び出したルーチンの実行が完了したあとにデバッガが復元することを指定します。その結果,呼び出したルーチンの実行が完了したあとに次の各項が確認されます。

  • CALL コマンドが入力される前に保留中であったベクタ例外は,まだ実行要求を保留中である。

  • ルーチンの呼び出し中に発生したベクタ例外でまだ実行要求を保留中のものはない。

  • ベクタ・レジスタの値は,CALL コマンドを入力する前の値と同じである。

CALL/NOSAVE_VECTOR_STATE コマンドは省略時の設定であり, CALL コマンドが実行される前に存在したベクタ型プロセッサの状態は,呼び出したルーチンの実行が完了したあとに復元しないことを指定します。この場合,ルーチン呼び出し後のベクタ型プロセッサの状態は,呼び出したルーチンの影響によって異なります。

/[NO]SAVE_VECTOR_STATE 修飾子は,VAX 汎用 (スカラ) レジスタには影響しません。これらのレジスタの値は必ず保存され,CALL コマンドでルーチンを実行すると復元されます。



16.10 画面モードでのベクタ・レジスタ・データの表示

画面モードでは,レジスタ表示が VAX 汎用レジスタの現在の値を示します。 第 7.4.5 項 を参照してください。

ベクタ・レジスタまたはベクタ制御レジスタに入っているデータを画面モードで表示するには,DO 表示を使用します。 第 7.2.1 項 を参照してください。

たとえば,次のコマンドは,V2_DISP という DO 表示を作成します。これは,レジスタ V2 の要素 4 から 7 までの内容を示します ( Fortran 配列構文 )。この表示は,プログラムからデバッガに制御が戻るたびに,自動的に更新されます。


DBG> DISPLAY V2_DISP AT RQ2 DO (EXAMINE %V2(4:7))



16.11 問題点と制限事項

この節では,ベクタ化されたプログラムに対するデバッガのサポートについて,問題と制限事項をまとめます。

  • プログラミング言語が BLISS,COBOL,RPG のいずれかである場合には, %VMR に格納するために型修飾子を指定しなければならない。次の例を参照。


    DEPOSIT/QUADWORD %VMR = %HEX 0FFFFFFFF 
    

  • プログラミング言語が PL/I,COBOL,DIBOL のいずれかの場合には, EXAMINE %VMR コマンドは %VMR を 16 進クォドワードではなく,ビット配列として表示する。他のプログラミング言語の省略時の動作を実現するには,EXAMINE/HEX/QUADWORD %VMR コマンドを入力する。

  • ベクタ・モードの同期がとられる場合には ( つまり,SET VECTOR_MODE SYNCHRONIZED コマンドを入力した場合 ),デバッガはベクタ命令に設定されたブレークポイントで 2 回ずつ実行を中断する。このようなブレークポイントから実行を再開するには, GO コマンドまたは STEP コマンドを入力しなければならない。


目次 索引

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