日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 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 章:タスキング・プログラムのデバッグ
第 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 レジスタの検査と値の格納

EXAMINE コマンドは,プログラム内でアクセス可能なレジスタの内容を表示します。 DEPOSIT コマンドを使用すると,これらのレジスタの内容を変更できます。レジスタの数と種類は,次の項に示すように,各 OpenVMS プラットフォームにより異なります。

4.4.1 VAX レジスタの検査と値の格納

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 に値を格納する場合は注意してください。

プロセッサ・ステータス・ロングワード (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 プロセッサでは,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 プロセッサには次のことが該当します。

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

  • R30 レジスタには,値を格納できません。

  • R31 レジスタと F31 レジスタには,値を格納できません。これらのレジスタには,恒久的に値 0 が割り当てられています。

  • ベクタ・レジスタはありません。

次の例は,レジスタの内容を確認し,値を格納する方法を示しています。


 
DBG> SHOW TYPE          ! Show type for locations without
type: long integer      ! a compiler-generated type.
DBG> SHOW RADIX         ! Identify current radix.
input radix: decimal
output radix: decimal
DBG> EXAMINE %R11       ! Display value in R11.
MOD3\%R11:  1024
DBG> DEPOSIT %R11 = 444 ! Deposit new value into R11.
DBG> EXAMINE %R11       ! Check new value.
R11:  444
DBG> EXAMINE %PC        ! Display value in program counter.
MOD\%PC: 1553
DBG> EXAMINE %SP        ! Display value in stack pointer.
0\%SP:  2147278720
DBG>
 

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

プロセッサ・ステータス (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.4.3 I64 レジスタの検査と値の格納

I64 プロセッサは,I64 アーキテクチャの以下のレジスタを備えています。

  • 最大 128 個の,64 ビット汎用レジスタ。

  • 最大 128 個の,82 ビット浮動小数点レジスタ (このデバッガでは,これらのレジスタを,完全なオクタワードとして扱うことができます)。

  • 最大 64 個の 1 ビット・プレディケート・レジスタ,最大 8 個の 64 ビット分岐レジスタ,最大 128 個 (アクセスや使用が可能なのは 20 個のみ) のアプリケーション・レジスタ。

  • 特殊レジスタ (例: %PC) および仮想レジスタ (例: %RETURN_PC)。

これらのレジスタの大半は,ユーザ・モードでのデバッグで,読み取りおよび書き込みが可能です。ただし,一部のレジスタは書き込み不可です。また,アクセスするために,System Code Debugger (SCD) の構成 ( 『OpenVMS System Analysis Tools Manual』を参照) に関連する高い特権が必要なレジスタもあります。

表 4-3 I64 レジスタのデバッガ・シンボル
シンボル 説明
I64 アプリケーション・レジスタ
%KR0...%KR7 カーネル・レジスタ 0...7
%RSC (%AR16) レジスタ・スタック・コンフィギュレーション
%BSP (%AR17) バッキング・ストア・ポインタ
%BSPSTORE (%AR18) メモリ・ストア用バッキング・ストア・ポインタ
%RNAT (%AR19) RSE NaT コレクション
%CCV ($AR32) 比較交換での比較値
%UNAT (%AR36) ユーザ NaT コレクション
%FPSR (%AR40) 浮動小数点ステータス
%PFS (%AR64) 以前のファンクション状態
%LC (%AR65) ループ・カウント
%EC (%AR66) エピローグ・カウント
%CSD コード・セグメント
%SSD スタック・セグメント
コントロール・レジスタ
%DCR (%CR0) デフォルト・コントロール
%ITM (%CR1) インターバル・タイマ・マッチ (SCD でのみ参照可能)
%IVA (%CR2) 割り込みベクタ・アドレス (SCD でのみ参照可能)
%PTA (%CR8) ページ・テーブル・アドレス (SCD でのみ参照可能)
%PSR (%CR9, %ISPR) 割り込みプロセッサ・ステータス
%ISR (%CR17) 割り込みステータス
%IIP (%CR19) 割り込み命令ポインタ
%IFA (%CR20) 割り込みフォルト・アドレス
%ITIR (%CR21) 割り込み TLB 挿入
%IIPA (%CR22) 割り込み命令前アドレス
%IFS (%CR23) 割り込みファンクション状態
%IIM (%CR24) 割り込み即値
%IHA (%CR25) 割り込みハッシュ・アドレス
%LID (%CR64) ローカル割り込み ID (SCDでのみ参照可能)
%TPR (%CR66) タスク・プライオリティ (SCDでのみ参照可能)
%IRR0...%IRR3 (%CR68...%CR71) 外部割り込み要求 0...3 (SCDでのみ参照可能)
%ITV (%CR72) インターバル・タイマ (SCDでのみ参照可能)
%PMV (%CR73) パフォーマンス監視 (SCDでのみ参照可能)
%CMCV (%CR74) 訂正済みマシン・チェック・ベクタ (SCDでのみ参照可能)
%IRR0 および %IRR1 (%CR80 および %CR81) ローカル・リダイレクション 0:1 (SCDでのみ参照可能)
特殊レジスタ
%IH (%SR0) インボケーション・ハンドル
%PREV_BSP 以前のバッキング・ストア・ポインタ
%PC (%IP) プログラム・カウンタ (命令ポインタ | スロット番号)
%RETURN_PC リターン・プログラム・カウンタ
%CFM 現在のフレーム・マーカ
%NEXT_PFS 前々回のファンクション状態
%PSP 以前のスタック・ポインタ
%CHFCTX_ADDR コンディション・ハンドリング・ファシリティ・コンテキスト・アドレス
%OSSD オペレーティング・システム固有データ
%HANDLER_FV ハンドラ・ファンクション値
%LSDA 言語固有データ領域
%UM ユーザ・マスク
プレディケート・レジスタ
%PR (%PRED) プレディケート・コレクション・レジスタ---%P0...%P63 の集まり
%P0...%P63 プレディケート (1 ビット) レジスタ 0...63
分岐レジスタ
%RP (%B0) リターン・ポインタ
%B1...%B7 分岐レジスタ 1...7
汎用整数レジスタ
%R0 汎用整数レジスタ 0
%GP (%R1) グローバル・データ・ポインタ
%R2...%R11 汎用整数レジスタ 2...11
%SP (%R12) スタック・ポインタ
%TP (%R13) スレッド・ポインタ
%R14...%R24 汎用整数レジスタ 14...24
%AP (%R25) 引数情報
%R26...%R127 汎用整数レジスタ 26...127
出力レジスタ
%OUT0...%OUT7 出力レジスタ,実行時別名 (たとえば,フレームが出力レジスタに割り当てられた場合, %OUT0 は,最初に割り当てられた出力レジスタ,たとえば %R38 に対応する)。
汎用レジスタ
%GRNAT0 および %GRNAT1 それぞれ 64 ビットの汎用レジスタの NAT (Not A Thing) コレクション・レジスタ。たとえば %GRNAT0<3,1,0> は,%R3 の NAT ビット。
浮動小数点レジスタ
%F0...%F127 浮動小数点レジスタ 0...127

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

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

  • 未割り当てのレジスタ,無効状態のレジスタ,または読み取り不可のレジスタには値を格納できません。例を次に示します。

    • %R38 〜 %R127 (%R32 〜 %R37 だけが割り当てられた場合)

    • %F0 (常に 0.0)

    • %F1 (常に 1.0)

    • %R0 (常に 0)

    • %SP

    • %P0 (常に 1)

    • %GRNAT0 および %GRNAT1

    • %PC 以外のすべての特殊レジスタ

    • 大半の制御レジスタとアプリケーション・レジスタ (下記を参照)

  • 通常のユーザ・モードのデバッグと SCD では,次のレジスタにも値を格納できます。

    • 例外フレーム用制御レジスタ %IPSR,%ISR,%IIP,%IFA,%ITIR, %IIPA,%IFS,%IIM,%IHA

    • アプリケーション・レジスタ %RSC,%CCV

  • SCD では,次のレジスタにも値を格納できます。

    • アプリケーション・レジスタ %KR0 〜 %KR7

    • 制御レジスタ %DCR,%ITM,%IVA,%PTA,%LID,%TPR,%IRR0 〜 %IRR3, %ITV,%PMV,%CMCV,%LRR0,%LRR1

  • ベクタ・レジスタはありません。

  • 一部のレジスタ読み取りは,自動的に書式化されます。 第 4.4.2 項 で説明しているように,この書式は変更できます (たとえば,EXAMINE/QUAD/HEX %FPSR)。

  • 浮動小数点ステータス・レジスタ (%FPSR) についての詳細は,『Intel IA-64 アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル第 1 巻』を参照してください。例を次に示します。


    目次 索引

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