日本-日本語

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


目次 索引



MACRO-32 は,データ型をラベル名にバイトします。バインドは,ラベル定義に続くアセンブラ指示文に従って行なわれます。サポートされている MACRO-32 の指示文を次に示します。

MACRO-32 の指示文 VMS のデータ型名
.BYTE バイト符号なし (BU)
.WORD ワード符号なし (WU)
.LONG ロングワード符号なし (LU)
.SIGNED_BYTE バイト整数(B)
.SIGNED_WORD ワード整数(W)
.LONG ロングワード整数(L)
.QUAD クォドワード整数(Q)
.F_FLOATING F 浮動小数点数(F)
.D_FLOATING D 浮動小数点数(D)
.G_FLOATING G 浮動小数点数(G)
.H_FLOATING H 浮動小数点数(H)(VAX 固有)
(該当なし) パック 10 進数(P)



C.11.4 MACRO-32 コンパイラ (AMACRO) (Alpha 専用)

MACRO-32 で記述したアプリケーションを Alpha システムに移植する場合は, MACRO-32 コンパイラ (AMACRO) を使用します。 MACRO-32 でコンパイルされたコードをデバッグするためのデバッグ・セッションは,アセンブルされたコードの場合に似ていますが,本項で説明するような重要な相違もあります。これらのアプリケーションを移植する場合の説明については,『 Porting VAX MACRO Code from OpenVMS VAX to OpenVMS Alpha 』を参照してください。

大きな相違は,コードがコンパイルされているという事実です。VAX システムでは, MACRO-32 の各命令は単一のマシン命令です。Alpha システムでは, MACRO-32 の各命令は,Alpha の複数のマシン命令へとコンパイルされることがあります。この相違によって大きな副作用が生じます。それは,コンパイル・コマンドで /NOOPTIMIZE を指定しない場合,コードの再配置と再スケジューリングが行われるということです。コードのデバッグが終わってから,/NOOPTIMIZE を指定しないでリコンパイルすることにより性能を改善できます。

コンパイルされたコードをデバッグする場合とアセンブルされたコードをデバッグする場合とには,他にも大きな相違があります。それは, MACRO-32 にとっての新しいコンセプトである,ルーチンの引数を調べるためのシンボリック変数の定義です。 VAX システムでは,ルーチンをデバッグしていて,引数をチェックしたくなったら,通常は,次のような入力を行うと考えられます。


        DBG> EXAMINE @AP        ; to see the argument count 
        DBG> EXAMINE @AP+4      ; to examine the first arg 

また,次のような入力をすることも考えられます。


        DBG> EXAMINE @AP        ; to see arg count 
        DBG> EXAMINE .+4:.+20   ; to see first 5 args 

Alpha システムでは,引数はメモリ内のベクタには常駐していません。これが VAX システムとは異なる点です。さらにはまた,Alpha システムには AP レジスタがありません。MACRO でコンパイルしたコードをデバッグしているときに, EXAMINE @AP と入力すると,デバッグは,AP は未定義シンボルであるというメッセージを発行します。

コンパイルしたコードでは,引数は,次に述べる項目を組み合せたものとして常駐することができます。

  • レジスタ

  • ルーチンのスタック・フレームの上のスタック

  • スタック・フレーム (ただし,引数リストがホーム・ポジションにあった,つまり VAX AP 参照を解決するためにスタック・フレームの固定位置に配置されていた場合,またはレジスタ引数のセーブを要求するルーチンからの呼び出しがあった場合)

作成されたコードを読み出して引数を検索することをコンパイラがユーザに要求することはありません。コンパイラには,引数の正しい位置を指し示す $ARGn シンボルがあります。$ARG0 は,VAX システムの @AP+0 と同じもの,つまり引数の個数です。たとえば $ARG1 は最初の引数,$ARG2 は 2 番目の引数です。これらの引数は,CALL_ENTRY 指示文および JSB_ENTRY 指示文で定義されますが,EXCEPTION_ENTRY 指示文では定義されません。

ユーザのコードで,コンパイラが $ARGn シンボルを作成しない追加の引数が使用されることがあります。 .CALL_ENTRY ルーチンに対して定義される $ARGn シンボルの個数は,コンパイラが自動検出または MAX_ARGS によって検出した最大値または 16 のどちらか小さい方です。.JSB_ENTRY ルーチンの場合,引数は呼び出す側のスタック・フレーム内のホーム・ポジションにあり,コンパイラは実際の数を検出できないので,$ARGn シンボルを常に 8 個作成します。

ほとんどの場合,追加の引数は容易に見つけられますが,そうでない場合もあります。

次の場合は,追加の引数は容易に見つけられます。

  • 引数リストがホーム・ポジションにセットされていないで,$ARGn シンボルが $ARG7 またはそれより大きいと定義されている場合。引数リストがホーム・ポジションにセットされていない場合,$ARG7 以上の $ARGn シンボルは,スタック上でクォドワードとして引き渡されるパラメータのリストを常に指している。それ以降の引数は,最後に定義された $ARGn シンボルに続くクォドワードにある。

  • 引数リストがホーム・ポジションにセットされていて,コンパイラが自動検出または MAX_ARGS によって検出した最大値以下の引数をチェックしたい場合。引数がホーム・ポジションにセットされていれば,$ARGn シンボルは,ホーム・ポジションにセットされた引数リストを常に指し示している。それ以降の引数は,最後に定義された $ARGn シンボルに続くクォドワードにある。

たとえば,次のようにすれば JSB ルーチン内の 8 番目の引数より先にある引数を調べることができます。この場合,引数リストのホーム・ポジションへのセットは呼び出す側で行うことが必要です。


  DBG> EX $ARG8  ; highest defined $ARGn
  . 
  . 
  . 
  DBG> EX .+4  ; next arg is in next longword 
  . 
  . 
  . 
  DBG> EX .+4  ; and so on 
 

この例では,引数リストをホーム・ポジションにセットするときに呼び出す側が少なくとも 10 個の引数を検出したと想定しています。

引数のホーム・ポジションをセットしなかったルーチンの最後の $ARGn シンボルより先の引数を見つけるには,上記の例で EX .+4 を EX .+8 で置き換えた後,例に示すとおりに実行します。

次の場合は,追加の引数を見つけるのは容易ではありません。

  • 引数リストがホーム・ポジションにセットされていて,コンパイラが検出した数を超える引数を調べたい場合。$ARGn シンボルは,ホーム・ポジションにセットされた引数リストに格納されているロングワードを指している。コンパイラが転送する引数の数は,このリストで検出できる個数だけである。ホーム・ポジションにセットされた引数のうちの最後の引数の先のロングワードを調べると,各種の他のスタック・コンテキストを調べることになる。

  • 引数リストがホーム・ポジションにセットされていないで, $ARGn シンボルが単に $ARG6 と定義されている場合。この場合,既存の $ARGn はレジスタを指し示すか,スタック・フレーム内のクォドワードの記憶位置を指し示すことになる。どちらの場合も,それ以降の引数は,定義された $ARGn シンボルの先のクォドワードの記憶位置を見ても調べることはできない。

これらのケースで追加の引数を見つける方法は,コンパイルされたマシン・コードを調べ,引数がどこに常駐しているかを判断することです。チェックしたい引数の最大値に対して MAX_ARGS が正しく指定されていれば,どちらの問題も解消します。

Alpha システムで浮動小数点数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。

  • Alpha 整数レジスタが浮動小数点数かどうか調べるには,EXAMINE/FLOAT コマンドが使用できる。
    Alpha システムに浮動小数点演算用レジスタが 1 セットあるとしても,浮動小数点演算を含む,コンパイルされた MACRO-32 コードでこれらのレジスタを使用することはない。使用されるのは Alpha 整数レジスタだけである。
    コンパイルされた MACRO-32 コードでの浮動小数点数演算は,コンパイラの外部で動作するエミュレーション・ルーチンで実行される。したがって,たとえば R7 に MACRO-32 浮動小数点数演算を実行しても, Alpha の浮動小数点数レジスタ 7 には影響はない。

  • .FLOAT 指示文または他の浮動小数点数記憶域指示文で宣言された記憶位置を調べるために EXAMINE コマンドを使用するときは,デバッガは自動的にその値を浮動小数点数データとして表示する。

  • G_FLOAT データ型を調べるために EXAMINE コマンドを使用しているとき,デバッガは,その値を VAX データに用に作成するためには 2 つのレジスタの内容を使用しない。
    次に例を示します。


    EXAMINE/G_FLOAT   R4 
    


    この例では,VAX の場合と異なるり,R4 と R5 の下位ロングワードは値の作成には使用されない。その代わり,R4 の内容のクォドワードが使用される。
    コンパイラが D_FLOAT 演算および G_FLOAT 演算用に作成したコードは,2 つの連続するレジスタの下位ロングワードのデータの VAX 形式を保持している。したがって,これらの 2 つのレジスタのどちらかに EXAMINE/G_FLOAT を使用しても,真の浮動小数点数値を得ることはできない。また,これらのレジスタのひとつに DEPOSIT/G_GLOAT を実行しても必要な結果は得られない。ただし,そのような値を半分にしたものをマニュアルで結合することはできる。例えば,次の命令を実行したとする。


    MOVG    DATA, R6 
    


    その後,現在 R6 と R7 にある G_FLOAT 値を次のシーケンスで読み出すことができる。


    DBG> EX R6 
    .MAIN.\%LINE 100\%R6:   0FFFFFFFF D8E640D1 
    DBG> EX R7 
    .MAIN.\%LINE 100\%R7:   00000000 2F1B24DD 
    DBG> DEP R0 = 2F1B24DDD8E640D1 
    DBG> EX/G_FLOAT R0 
    .MAIN.\%LINE 100\%R0:   4568.89900000000 
    

  • DEPOSIT コマンドを使用すれば,Alpha 整数レジスタに浮動小数点数データを格納できる。構文は VAX の場合と同じである。

  • H_FLOAT はサポートされていない。



Alpha システムでパック 10 進数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。

  • .PACKED 指示文で宣言された記憶位置を調べるために EXAMINE コマンドを使用するときは,デバッガは自動的にその値をパック 10 進数データ型として表示する。

  • パック 10 進数データを格納できる。構文は VAX の場合と同じである。



C.12 MACRO-64 (Alpha のみ)

以下の各節では,デバッガによる MACRO-64 のサポートについて説明します。

C.12.1 言語式の演算子

MACRO-64 言語には,高級言語と同じ意味での式というものはありません。受け入れられるのはアセンブリ時の式と,限られたセットの演算子だけです。デバッグ時に MACRO-64 のプログラミングで,他の言語の場合と同じくらい自由に式を使用できるようにするため,デバッガは, MACRO-64 自体には含まれていない多数の演算子を MACRO-64 の言語式の中で受け入れるようになっています。特に,BLISS以後にモデル化された比較演算子とブール演算子のセットは完全に受け入れます。間接参照演算子と通常の算術演算子も受け入れられます。

種類 シンボル 機能
接頭辞 @ 間接参照
接頭辞 . 間接参照
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 MOD 剰余
挿入辞 @ 左シフト
挿入辞 EQL 等値
挿入辞 EQLU 等値
挿入辞 NEQ 不等
挿入辞 NEQU 不等
挿入辞 GTR 大なり
挿入辞 GTRU 大なり符号なし
挿入辞 GEQ 以上
挿入辞 GEQU 以上符号なし
挿入辞 LSS 小なり
挿入辞 LSSU 小なり符号なし
挿入辞 LEQ 以下
挿入辞 LEQU 以下符号なし
接頭辞 NOT ビット単位の NOT
挿入辞 AND ビット単位の AND
挿入辞 OR ビット単位の OR
挿入辞 XOR ビット単位の排他的論理和
挿入辞 EQV ビット単位の同値



C.12.2 言語式とアドレス式の構造

サポートされている, MACRO-64 の言語式とアドレス式の構造を次に示します。

シンボル 構造
<p,s,e> BLISS 同様のビットフィールド



C.12.3 データ型

MACRO-64 は,データ型をラベル名にバインドします。バインドは,ラベル定義に続くアセンブラ指示文に従って行われます。たとえば,次のコード内の .LONG データ指示文は,ロングワード整数データ型をラベル V1,V2,および V3 にバインドするよう MACRO-64 に対して指示します。


.PSECT A, NOEXE 
.BYTE 5 
V1: 
V2: 
V3: .LONG 7 

V1,V2,および V3 にバインドされている型を確認するには, SHOW SYMBOL/TYPE コマンドを V* パラメータ付きで実行します。実行結果の表示は次のとおりです。


   data  .MAIN.\V1 
      atomic type, longword integer, size: 4 bytes 
   data .MAIN.\V2 
      atomic type, longword integer, size: 4 bytes 
   data .MAIN.\V3 
      atomic type, longword integer, size: 4 bytes) 

サポートされている MACRO-64 の指示文を次に示します。

MACRO-64 のデータ型 VMS のデータ型名
.BYTE バイト符号なし (BU)
.WORD ワード符号なし (WU)
.LONG ロングワード符号なし (LU)
.SIGNED_BYTE バイト整数(B)
.SIGNED_WORD ワード整数(W)
.LONG ロングワード整数(L)
.QUAD クォドワード整数(Q)
.F_FLOATING F 浮動小数点数(F)
.D_FLOATING D 浮動小数点数(D)
.G_FLOATING G 浮動小数点数(G)
.S_FLOATING (Alpha 固有) S 浮動小数点数 (S)
.T_FLOATING (Alpha 固有) T 浮動小数点数 (T)
(該当なし) パック 10 進数(P)


目次 索引

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