日本-日本語

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


目次 索引



VAX プロセッサでは,命令を検査するだけでなく,そこに値を格納することもできます。次のDEPOSIT コマンド構文を使用します。


DEPOSIT/INSTRUCTION address-expression = "language-expression" 

命令は,二重引用符または一重引用符で囲まなければなりません。また,この区切り文字の付いた文字列が ASCII 文字列ではなく命令であることを示すため,DEPOSIT コマンドといっしょに /INSTRUCTION 修飾子も使用しなければなりません。あるいは,複数の命令を格納する場合には,最初に SET TYPE/OVERRIDE INSTRUCTION コマンドを入力することができます ( 第 4.5.2 項 を参照 )。そのようにすれば,DEPOSIT コマンドで /INSTRUCTION 修飾子を使用する必要がなくなります。

命令が占有するバイト数はオペランドによって異なります。任意の長さの命令を連続したメモリ記憶位置へ格納する場合,命令を格納できる次の未使用記憶位置を設定するためには論理的後続データ演算子 (Return キー) を使用します。次の例はその手法を示しています。


DBG> SET TYPE/OVERRIDE/INST       ! 命令に省略時の型を設定する。 
DBG> DEPOSIT 730 = "MOVB #77, R1" ! 命令をアドレス 730 から格納する。
DBG> EXAMINE .                    ! 格納を確認するため,現在の値を検査する。
730:  MOVB  #77,R1
DBG> EXAMINE [Return]                ! 論理的後続データを新しい現在の値にする。
734:  HALT
DBG> DEPOSIT . = "MOVB #66, R2"   ! 次の命令を格納する。
DBG> EXAMINE .                    ! 格納を表示し確認する。
734:  MOVB  #66,R2
DBG>

命令を置換する場合,新しい命令の長さがオペランドも含めて古い命令と同じバイト数であることを確認してください。新しい命令のほうが長い場合は,その格納は必ず重ね書きによって行われるので,次の命令が破壊されてしまいます。新しい命令が古い命令より短い場合には,置換後に未使用のまま残ったメモリのバイトに NOP 命令 ( ノー・オペレーション命令 ) を格納しなければなりません。デバッガは,格納する命令が次の命令に重ね書きされる場合でも警告を出すこともなく,またメモリ内の空のバイトを NOP で埋めるように注意を喚起することもありません。

次の例は,命令を同じ長さの命令で置換する方法を示しています。


DBG> SET STEP INSTRUCTION           ! 命令ごとにステップ実行する。
DBG> STEP
stepped to 1584: PUSHAL  (R11)
DBG> STEP
stepped to 1586: CALLS  #1,L^2224   ! 置き換えたい命令。
DBG> EXAMINE .%PC
1586: CALLS  #1,L^2224
DBG> EXAMINE [Return]                  ! 次の命令の開始点を
1593:  CALLS   #0,L^2216            ! 判別する (1593)。
DBG> DEPOSIT/INST 1586 = "CALLS  #2,L^2224"
                                    ! 新しい命令を格納する。
DBG> EXAMINE .                      ! その命令が格納されたことを
1586:  CALLS   #2,L^2224            ! 確認する。
DBG> EXAMINE [Return]                  ! 次の命令が
1593:  CALLS   #0,L^2216            ! 変更されていないことを確認する。
DBG> 



4.4 レジスタの検査と値の格納

VAX アーキテクチャが 16 個の汎用レジスタと 18 個のベクタ・レジスタを備えており,それらの一部は一時的なアドレスやデータの記憶域として使用されます。 表 4-1 に,VAX レジスタを参照するデバッガ組み込みシンボルを示します。

表 4-1 VAX レジスタ用のデバッガ・シンボル
シンボル 説明
VAX の汎用レジスタ
%R0...%R11 汎用レジスタ (R0...R11)
%AP (%R12) 引数ポインタ (AP)
%FP (%R13) フレーム・ポインタ (FP)
%SP (%R14) スタック・ポインタ (SP)
%PC (%R15) プログラム・カウンタ (PC)
%PSL プロセッサ・ステータス・ロングワード (PSL)
VAX のベクタ・レジスタおよびベクタ制御レジスタ
%V0...%V15 ベクタ・レジスタ V0...V15
%VCR ベクタ数レジスタ
%VLR ベクタ長レジスタ
%VMR ベクタ・マスク・レジスタ

VAX プロセッサには次のことが該当します。

  • プログラムで同じ名前のシンボルを定義していない場合は,パーセント記号 (%) の接頭辞を省略できる。

  • すべてのレジスタの内容を検査できる。SP を除くすべてのレジスタに値を格納できる。FP に値を格納する場合は注意する。

Alpha プロセッサでは,Alpha アーキテクチャが 32 個の汎用 ( 整数 ) レジスタと 32 個の浮動小数点レジスタを備えており,それらの一部は一時的なアドレスやデータの記憶域として使用されます。 表 4-2 に, Alpha プロセッサ・レジスタを参照するデバッガ組み込みシンボルを示します。

表 4-2 Alpha レジスタ用のデバッガ・シンボル
シンボル 説明
Alphaの整数レジスタ
%R0...%R28 レジスタ R0...R28
%FP (%R29) スタック・フレーム基底レジスタ (FP)
%SP (%R30) スタック・ポインタ (SP)
%R31 ReadAsZero/Sink (RZ)
%PC プログラム・カウンタ (PC)
%PS プロセッサ・ステータス・レジスタ (PS)( Alpha プロセッサの場合,組み込みシンボルの%PSLと%PSWは使用できない)
Alphaの浮動小数点レジスタ
%F0...%F30 レジスタ F0...F30
%F31 ReadAsZero/Sink

Alpha プロセッサには次のことが該当します。

  • プログラムで同じ名前のシンボルを定義していない場合は,パーセント記号 (%) の接頭辞を省略できる。

  • レジスタ R31 と F31 には値を格納できない。これらのレジスタには永久に値ゼロが代入される。

  • ベクタ・レジスタはない。

  • デバッガは画面モード・レジスタ表示を提供しない。

次の例はレジスタの検査とそこに値を格納する方法を示しています。


DBG> SHOW TYPE          ! コンパイラ生成型を持たない
type: long integer      ! 記憶位置の型を表示する。
DBG> SHOW RADIX         ! 現在の基数を表示する。
input radix: decimal
output radix: decimal
DBG> EXAMINE %R11       ! R11 内の値を表示する。
MOD3\%R11:  1024
DBG> DEPOSIT %R11 = 444 ! R11 に新しい値を格納する。
DBG> EXAMINE %R11       ! 新しい値をチェックする。
R11:  444
DBG> EXAMINE %PC        ! プログラム・カウンタ内の値を表示する。
MOD\%PC: 1553
DBG> EXAMINE %SP        ! スタック・ポインタ内の値を表示する。
0\%SP:  2147278720
DBG>

PC についての詳しい説明は 第 4.3.1 項 を参照してください。

4.4.1 プロセッサ・ステータス・ロングワード (VAX のみ)

VAX プロセッサでは,プロセッサ・ステータス・ロングワード(PSL) レジスタの値がプロセッサ・ステータス変数の数を表します。PSL の最初の 16 ビット ( この 16 ビットをプロセッサ・ステータス・ワードまたは PSW という ) には,現在のプロセッサ・ステータスに関する非特権情報が入っています。これらのビットの値はユーザ・プログラムによって制御できます。 PSL の残りの 16 ビット ( ビット 16〜31 ) には特権情報が入っており,ユーザ・モード・プログラムでは変更できません。

次の例は PSL の内容を検査する方法を示しています。


DBG> EXAMINE %PSL
MOD3\PSL: 
      CMP TP FPD IS CURMOD PRVMOD IPL DV FU IV T N Z V C 
       n   n  n   n  mode   mode   1v  n  n  n n n n n n
DBG>

各ビットの値も含めた PSL についての完全な説明は, 『VAX Architecture Handbook』 を参照してください。

PSL 内の情報は別の形式でも表示できます。次に例を示します。


DBG> EXAMINE/LONG/HEX %PSL
MOD3\%PSL:        03C00010
DBG> EXAMINE/LONG/BIN %PSL
MOD3\%PSL:        00000011 11000000 00000000 00010000
DBG>

EXAMINE/PSL コマンドは,記憶位置の値を PSL 形式で表示します。これは,呼び出しスタック上の保存された PSL を検査するのに役立ちます。

PSL 内のすべての条件を禁止するには,次の DEPOSIT コマンドを使用してビット 0〜15 をクリアします。


DBG> DEPOSIT/WORD PSL = 0
DBG> EXAMINE/PSL
MOD3\PSL:
      CMP TP FPD IS CURMOD PRVMOD IPL DV FU IV T N Z V C
       0   0  0   0  USER   USER   0   0  0  0 0 0 0 0 0
DBG> 



4.4.2 プロセッサ・ステータス (Alphaのみ)

Alpha プロセッサでは,プロセッサ・ステータス ( PS ) レジスタの値がプロセッサ・ステータス変数の数を表します。PS の最初の 3 ビットは,このソフトウェアが使用するために予約されています。これらのビットの値はユーザ・プログラムで制御できます。残りのビット ( ビット 4〜64 ) には特権情報が入っており,ユーザ・モード・プログラムでは変更できません。

次の例は PS の内容を検査する方法を示しています。


DBG> EXAMINE %PS
MOD1\%PS: 
      SP_ALIGN IPL VMM   CM   IP SW 
         48     0   0   USER   0  3
DBG>

各ビットの値も含めた PS についての完全な説明は,『Alpha Architecture Reference Manual』を参照してください。

PS 内の情報は別の形式でも表示できます。次に例を示します。


DBG> EXAMINE/LONG/HEX %PS
MOD1\%PS:        0000001B
DBG> EXAMINE/LONG/BIN %PS
MOD1\%PS:        00000000 00000000 00000000 00011011
DBG>

EXAMINE/PS コマンドは,記憶位置の値を PS 形式で表示します。これは,現在の PS 値と保存された PS 値の組み合わせを検査するのに役立ちます。

4.5 検査と格納を行う場合の型の指定

ここまでの節では,シンボリック名を持ち,したがってコンパイラ生成型に対応しているプログラム記憶位置を EXAMINE コマンドと DEPOSIT コマンドで使用する方法を説明しました。

第 4.5.1 項 では,シンボリック名を持たないプログラム記憶位置用にデバッガがデータを編集 ( 型指定 ) する方法と,それらの記憶位置用に型を制御する方法を説明します。

第 4.5.2 項 では,プログラム記憶位置に対応した型を上書きする方法を,シンボリック名を持つ記憶位置も含めて説明します。

4.5.1 シンボリック名を持たないプログラム記憶位置に対する型の定義

シンボリック名を持たず,したがってコンパイラ生成型に対応付けられていないプログラム記憶位置は,省略時の設定ではロングワード整数型を持ちます。この省略時の型を使用してそれらの記憶位置を検査し,それらの記憶位置へ値を格納する方法については, 第 4.1.5 項 を参照してください。

SET TYPE コマンドを使用すると,省略時の型を変更できます。これは,別の型の記憶位置の内容を検査および表示したい場合や,特定の型の値を別の型に対応付けられた記憶位置へ格納したい場合に役立ちます。 表 4-3 は, SET TYPE コマンドの型のキーワードの一覧です。

表 4-3 SET TYPE キーワード
ASCIC D_FLOAT H_FLOAT 1 PACKED
ASCID DATE_TIME INSTRUCTION QUADWORD
ASCII: n EXTENDED_FLOAT 2 LONG_FLOAT 2 S_FLOAT 2
ASCIW F_LOAT LONG_LONG_FLOAT 2 T_FLOAT 2
ASCIZ FLOAT LONGWORD TYPE=( type-expression)
BYTE G_FLOAT OCTAWORD WORD
      X_FLOAT 2

1VAX 固有
2Alpha 固有

たとえば,次のコマンドはシンボリック名を持たない記憶位置の型をバイト整数型,G 浮動小数点数型,6 バイトの ASCII データからなる ASCII 型にそれぞれ設定します。一連のSET TYPE コマンドは型を再設定します。


DBG> SET TYPE BYTE
DBG> SET TYPE G_FLOAT
DBG> SET TYPE ASCII:6

SET TYPE コマンドは,/OVERRIDE 修飾子を指定せずに使用した場合,シンボリック名を持つプログラム記憶位置 ( コンパイラ生成型に対応付けられた記憶位置 ) の型には影響を及ぼさないので注意してください。

SHOW TYPE コマンドは,シンボリック名を持たない記憶位置の現在の型を表示します。そのような記憶位置の省略時の型を復元するには, SET TYPE LONGWORD コマンドを入力します。

4.5.2 現在の型の上書き

SET TYPE/OVERRIDE コマンドを使用すれば,任意のプログラム記憶位置に対応した型を上書きでき,その結果どのようなコンパイラ生成型でも変更できます。たとえば,次のコマンドの実行後に EXAMINE コマンドを無修飾で実行した場合,指定した記憶位置の最初のバイトの内容だけが表示され,その内容はバイト整数データとして解釈されます。無修飾の DEPOSIT コマンドを実行した場合は,指定した記憶位置の最初のバイトだけが変更され,格納するデータはバイト整数データとして編集されます。


DBG> SET TYPE/OVERRIDE BYTE

SET TYPE/OVERRIDE コマンドに対して指定できる型キーワードについては, 表 4-3 を参照してください。

現在の上書き型を表示するには,SHOW TYPE/OVERRIDE コマンドを入力します。現在の上書き型を取り消して,シンボリック名を持つ記憶位置の通常の解釈へ戻すには,CANCEL TYPE/OVERRIDE コマンドを入力します。

EXAMINE コマンドと DEPOSIT コマンドには,EXAMINE コマンドまたは DEPOSIT コマンドの実行中に,プログラムの記憶位置に現在割り当てられている型を無効にするための修飾子があります。これらの修飾子は,コンパイラで生成された型だけでなく,SET TYPE または SET TYPE/OVERRIDE コマンドも無効にします。各コマンドで使用できる型修飾子については, DEPOSIT コマンドと EXAMINE コマンドを参照してください。

型修飾子を指定して EXAMINE コマンドを使用した場合,アドレス式で指定した要素がその型で表示されます。次に例を示します。


DBG> EXAMINE/BYTE .           ! 型はバイト整数である。
MOD3\%LINE 15 :  -48
DBG> EXAMINE/WORD .           ! 型はワード整数である。
MOD3\%LINE 15 :  464
DBG> EXAMINE/LONG .           ! 型はロングワード整数である。
MOD3\%LINE 15 :  749404624
DBG> EXAMINE/QUAD .           ! 型はクォドワード整数である。
MOD3%LINE 15 :  +0130653502894178768
DBG> EXAMINE/FLOAT .          ! 型は F 浮動小数点数である。
MOD3%LINE 15 :   1.9117807E-38
DBG> EXAMINE/G_FLOAT .        ! 型は G 浮動小数点数である。
MOD3%LINE 15 :   1.509506018605227E-300
DBG> EXAMINE/ASCII .          ! 型は ASCII 文字列である。
MOD3\%LINE 15 :  ".."
DBG>

型修飾子を指定して DEPOSIT コマンドを使用した場合,アドレス式で指定した記憶位置へその型の値が格納され,そのアドレス式に対応する型が上書きされます。

残りの項では,型修飾子と SET TYPE コマンドを使用して整数型,文字列型,およびユーザ宣言型を指定する例を示します。

次の例は,整数型修飾子 (/BYTE,/WORD,/LONGWORD) を指定した EXAMINE コマンドと DEPOSIT コマンドの使用例です。これらの型修飾子を使用すれば,特定の整数型の値を任意のプログラム記憶位置へ格納することができます。


DBG> SHOW TYPE           ! コンパイラ生成型を持たない
type:  long integer      ! 記憶位置の型を表示する。
DBG> EVALU/ADDR .        ! 現在の記憶位置は 724 である。
724
DBG> DEPO/BYTE . = 1     ! 値 1 をアドレス 724 の 1 バイトの 
                         ! メモリへ格納する。
DBG> EXAM .              ! 省略時の設定では 4 バイトが検査される。
724:  1280461057
DBG> EXAM/BYTE .         ! 1 バイトだけを検査する。
724:  1
DBG> DEPO/WORD . = 2     ! 値 2 を現在の値の最初の 
                         ! 2 バイト (ワード) へ格納する。
DBG> EXAM/WORD .         ! 現在の値の 1 ワードを検査する。
724:  2
DBG> DEPO/LONG 724 = 999 ! 値 999 をアドレス 724 から始まる 4 バイト
                         !(ロングワード) へ格納する。
DBG> EXAM/LONG 724       ! アドレス 724 から始まる 4 バイト
724:  999                ! (ロングワード) を検査する。
DBG>


目次 索引

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