日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 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
デバッガ説明書


目次 索引



SET BREAK/EVENT コマンドと SET TRACE/EVENT コマンドを使用すると, Ada の例外ハンドラが処理しようとしている例外にブレークポイントとトレースポイントを設定することができます。制御を渡される Ada の各例外ハンドラの実行を,これらのコマンドで監視することができます。

これらのコマンドでは,次の 2 つのイベント名を指定することができます。

HANDLED 何らかの Ada の例外ハンドラが例外を処理しようとしているときに検出される。 ( HANDLED_OTHERS を含む)
HANDLED_OTHERS Other を選択している Ada の例外ハンドラが例外を処理しようとしているときのみ検出される。

たとえば,次のコマンドは,Ada の例外ハンドラが例外を処理しようとしているときに検出されるブレークポイントを設定します。

DBG> SET BREAK/EVENT=HANDLED

ブレークポイントが検出されると,処理されようとしている例外と実行されようとしている例外ハンドラをデバッガが示します。その後,この情報を利用して特定のハンドラにブレークポイントを設定することができます。また,GO コマンドを入力して,Ada のどのハンドラが次に例外を処理しようとするかを見ることもできます。次に例を示します。

DBG> GO
     ...
break on Ada event HANDLED 
  task %TASK 1 is about to handle an exception 
  The Ada exception handler is at: PROCESSOR.%LINE 21 
    %ADA-F-CONSTRAINT_ERRO, CONSTRAINT_ERROR 
    -ADA-I-EXCRAIPRI, Exception raised prior to PC = 00000A7C
DBG> SET BREAK PROCESSOR.%LINE 21; GO



C.3.11 データの検査と操作

データを検査または操作するときは,次の関連事項に注意してください。

  • 非静的変数 ( ライブラリ・パッケージの中で宣言されていないすべての変数 ) の確認,または非静的変数への格納を行うには,その前に,非静的変数を定義するサブプログラムやタスクなどが呼び出しスタック上でアクティブになっていなければなりません。

  • Ada のサブプログラムの仮パラメータまたは Ada の変数を確認したり,格納したり,または評価したりするには,その前にそのパラメータや変数が確立されていなければなりません。つまり,パラメータや変数の宣言の後ろへステップ実行するか,または実行を移さなければなりません。宣言が確立されていない変数や仮パラメータに格納されている値は,違う場合があります。

型明示式の使用も含め,デバッガではほとんどの場合,プログラムのソース・コードに指定するのと全く同じように,変数や式をデバッガ・コマンドの中で指定することができます。次の各サブトピックでは,レコードとアクセス型についてのデバッガのサポートに関する補足事項について説明します。

デバッガによるレコードのサポートについては次の点に注意してください。

  • レコード ( シンボル ) 宣言と型宣言の有効範囲が異なっている場合,Ada の特定のレコード変数では,デバッガがレコードの構成要素を正確に表示できず,エラー・メッセージ NOACCESSR が表示されることがあります。

  • 可変レコードについては,アクティブでない可変部の構成要素に値を代入したり,その構成要素の値を確認することができます。しかしこれは Ada では不正な動作になるので,情報メッセージもあわせて発行されます。たとえば,REC1 レコードに STATUS という名前の可変フィールドがあり,STATUS の値が REC1.COMP3 が非アクティブであることを示しているとすると,次のようになります。

    DBG> EXAMINE REC1.COMP3
    %DEBUG-I-BADDISCVAL, incorrect value of 1 in discriminant 
        field STATUS 
    MAIN.REC1.COMP3:    438
    



デバッガによるアクセス型のサポートについては,次の点に注意してください。

  • デバッガはアロケータをサポートしていないので,デバッガで新しいアクセス・オブジェクトを作成することはできない。

  • EXAMINE コマンドでアクセス・オブジェクトの名前を指定すると,デバッガはその名前が指すオブジェクトのメモリ記憶位置を表示する。

  • 指定オブジェクトの値を確認するには,選択要素の表記法を使用して .ALL を指定しなければならない。たとえば,A が指すレコード・アクセス・オブジェクトの値を確認するには,次のようにする。

    DBG> EXAMINE A.ALL
    EXAMPLE.A.ALL 
        NAME(1..10):        "John Doe  " 
        AGE :       6 
        NEXT:       1462808
    

  • 指定オブジェクトの構成要素の 1 つを確認する場合は,選択要素の構文から .ALL を省略することができる。次に例を示す。

    DBG> EXAMINE A.NAME
    EXAMPLE.A.ALL.NAME(1..10):     "John Doe  "
    

不完全型についてのデバッガのサポートの例を示します。次の宣言を見てください。

package P is
   type T is private; 
private
   type T_TYPE; 
   type T is access T_TYPE; 
end P; 
 
package body P is
   type T_TYPE is
      record
        A: NATURAL := 5; 
        B: NATURAL := 4; 
      end record; 
 
   T_REC: T_TYPE; 
   T_PTR: T := new T_TYPE'(T_REC); 
end P; 
 
with P; use P; 
procedure INCOMPLETE is
   VAR: T; 
begin
   ...
end INCOMPLETE; 

T 型についての完全な情報がデバッガに与えられていないので,VAR 変数を操作することはできません。ただし,パッケージ本体 P の中で宣言されているオブジェクトについては情報が与えられているので,T_PTR 変数と T_REC 変数を操作することはできます。

C.3.12 モジュール名とパス名

Ada のデバッガ・モジュール名は,対応するコンパイル単位の名前と同じです。これには次の条件があります。あいまいさをなくすために,仕様の名前にアンダスコア文字 (_) を追加して仕様と本体の名前とを区別してください。たとえば,TEST (本体),TEST_ (仕様) とします。プログラム内のモジュールの正確な名前を確認するには, SHOW MODULE コマンドを使用します。

ほとんどの場合,パス名を指定する際に,仕様と本体とを区別するアンダスコアを後部に入力する必要はありません。通常,デバッガは状況に応じてこの 2 つを区別します。したがって,あいまいさを解消しなければならないときだけ,この命名規則を使用してください。

デバッガの言語が Ada に設定されている場合,デバッガは,パス名の要素を区切るのに選択要素の表記法を一般的に使用し,Ada の規則に従ってパス名を構成します。他の言語では要素を区切るのにバックスラッシュを使用します。次に例を示します。

TEST_.A1        ! A1 はコンパイル単位 TEST のパッケージ 
                ! 仕様の中で宣言されている 
TEST.B1         ! B1 はコンパイル単位 TEST のパッケージ 
                ! 本体の中で宣言されている 

サブユニットのパス名 ( 展開される名前 ) は,最大 247 文字の長さまで指定することができます。

シンボルがパッケージの外部で直接に可視になるよう,パッケージ内で use 句によって宣言されている場合は,プログラム自体またはデバッガ・コマンドのいずれにおいても,そのシンボルを参照するために,展開された名前 ( package-name.symbol ) を指定する必要はありません。

指定されたブロック,サブプログラム,またはパッケージが use 句の中で参照しているパッケージを示すには,SHOW SYMBOL/USE_CLAUSE コマンドを使用します ( 指定されているパッケージがライブラリであるかどうかは関係ありません )。指定されている要素が,ライブラリであるかどうかにかかわらずパッケージである場合は,use 句内の特定のモジュール名を示すブロック,サブプログラム,パッケージなどもこのコマンドで示すことができます。次に例を示します。

DBG> SHOW SYMBOL/USE_CLAUSE B_
package spec B_ 
    used by:  F 
    uses:     A_

ソース・コードのループ文または宣言ブロックにラベルが付けられている場合,デバッガはそのラベルを表示します。それ以外の場合,ループ 文については LOOP$n を表示し,宣言 ブロックについては BLOCK$n を表示します。それぞれのn は,その文またはブロックが始まる行番号を示します。

C.3.13 シンボル検索規則

Ada プログラムでパス名 ( Ada の展開された名前を含む ) を指定しなかった場合,デバッガは次のように実行時シンボル・テーブルを検索します。

  1. デバッガは,現在そこで実行を一時停止している現在の PC 値に近いブロックまたはルーチンの中でシンボルを検索します。

  2. シンボルが見つからない場合は,use 句に指定されているパッケージを次に検索します。デバッガは,現在の有効範囲の領域と同じモジュールに宣言があるパッケージと,ライブラリ・パッケージとを区別しません。可視である複数のパッケージの中で同じシンボルが宣言されている場合,Ada の規則によりシンボルは固有のものではなくなり,次のようなメッセージが発行されます。

    %DEBUG-E-NOUNIQUE, symbol 'X' is not unique
    

  3. それでもまだシンボルが見つからない場合,他の言語については,呼び出しスタックと他の有効範囲を検索します。



C.3.14 モジュールの設定

ユーザまたはデバッガが Ada のモジュールを設定するときに,省略時設定では,デバッガが "関連" モジュールもすべて設定します。この関連モジュールとは,設定されるモジュールの中でシンボルが可視でなければならないモジュールを指します。これらの関連モジュールは,with 句またはサブユニット関係のどちらかで設定されるモジュールに関連づけられます。

関連モジュールの設定は次のように行われます。設定されるモジュールが M1 である場合,次の各モジュールが関連しているとみなされ,設定されます。

  • M1 が ライブラリ本体 である場合に,対応するライブラリ仕様があれば,それも設定されます。

  • M1 が サブユニット である場合,その親ユニットと,親ユニットのすべての親も設定されます。

  • M1 が with 句で ライブラリ・パッケージ P1 を指定している場合,P1 の仕様も設定されます。 P1 の本体と P1 のサブユニットの中で宣言されているシンボルは外部では可視でないので,P1 の本体と P1 のサブユニットは何も設定されません。
    P1 の仕様が with 句で P2 パッケージを指定している場合は, P2 の仕様も設定されます。同様に,P2 の仕様が with 句で P3 パッケージを指定している場合は P3 の仕様も設定され,同じように設定されていきます。このようなライブラリ・パッケージはすべて,それらの仕様が設定されるので,他のパッケージで宣言されているデータ構成要素 ( たとえばレコードの構成要素 ) をアクセスすることができます。

  • M1 が with 句で ライブラリのサブプログラム を指定している場合,そのサブプログラムは 設定されません。M1 の中で可視でなければならないのはサブプログラム名だけです。ライブラリのサブプログラム内の宣言は,そのサブプログラムの外部で可視である必要はありません。したがって,デバッガがライブラリのサブプログラム名を RST に挿入するのは,M1 が設定されるときになります。

多くのモジュールが設定されることでデバッガの性能に問題が生じるときは,SET MODE NODYNAMIC コマンドを使用してください。このコマンドで,動的モジュールの設定が禁止されるとともに,関連モジュールの設定が禁止されます。そのあとで SET MODULE コマンドを使用して,個々のモジュールを明示的に設定する必要があります。

省略時の SET MODULE コマンドでは,コマンドで指定したモジュールと同時に関連モジュールが設定されます。

SET MODULE/NORELATED コマンドは,明示的に指定されたモジュールのみを設定します。ただし,SET MODULE/NORELATED を使用すると,別のユニットで宣言されており,実行の時点で可視状態になっているべきシンボルが可視状態でなくなっていたり,同じシンボルの再宣言によって隠蔽されているべきシンボルが可視状態になっていたりすることがあります。

CANCEL MODULE/NORELATED コマンドで RST から削除されるのは,明示的に指定したモジュールだけです。省略時設定の CANCEL MODULE/NORELATED コマンドは,Ada の有効範囲規則と可視性の規則の目的に合致した方法で関連モジュールを削除します。正確な効果はモジュールの関連性に依存します。

サブユニットの関連と直接関連の違いは,ライブラリ・パッケージの関連の違いと同様です。

デバッガは,パッケージ本体のためのモジュールを自動的には設定しません。

パッケージ本体をデバッグするには,または対応するパッケージ仕様の中で宣言されているサブプログラムをデバッグするには,ユーザが自分でライブラリ・パッケージ本体のためのモジュールを設定しなければならない場合があります。

C.3.15 オーバーロードされた名前とシンボルの解決

オーバーロードされた名前やシンボルが現れると,次のようなメッセージが表示されます。

%DEBUG-E-NOTUNQOVR, symbol 'ADD' is overloaded 
     use SHOW SYMBOL to find the unique symbol names

オーバーロードされたシンボルが列挙リテラルである場合は,オーバーロードを解決するために,型明示式を使用することができます。

オーバーロードされたシンボルがサブプログラムまたはタスクの accept 文を表す場合は,コンパイラがデバッガ用に作成する固有の名前を使用することができます。名前は,あとでパッケージ本体でオーバーロードされることがあるので,コンパイラは必ず各サブプログラム固有の名前をライブラリ・パッケージの仕様に作成します。タスクの accept 文やサブプログラムが他の場所で宣言されているときは,タスクの accept 文やサブプログラムが実際にオーバーロードされる場合にだけ,固有の名前が作成されます。

オーバーロードされたタスクの accept 文とサブプログラムの名前は, 2 つのアンダスコアとそれに続く整数からなる接尾辞によって区別されます。それぞれのシンボルは,この整数で別々のものとして示されます。名前がオーバーロードされているサブプログラムを別々のものとして指定するには,固有の名前を表記してデバッガ・コマンドを使用する必要があります。しかし,あいまいさがない場合は,固有の名前が作成されてもその名前を使用する必要はありません。

C.3.16 CALLコマンド

Ada プログラムで確実に CALL コマンドを使用できるのは,エクスポートされているサブプログラムでこのコマンドを使用する場合だけです。エクスポートされるサブプログラムは,ライブラリのサブプログラムであるか,またはライブラリ・パッケージの最も外側にある宣言部で宣言されている必要があります。

CALL コマンドは,サブプログラムをエクスポートできるかどうかはチェックしません。また,ユーザが指定するパラメータの受け渡し方式もチェックしません。パラメータの値を変更するために CALL コマンドを使用することはできませんので注意してください。

Ada の実行時ライブラリを実行中に CALL コマンドを入力するとデッドロックを起こすことがあります。実行時ライブラリ・ルーチンは,タスキング環境で実行時ライブラリ・ルーチンを作動可能にする内部ロックを取得および解放します。デッドロックを生じる可能性があるのは, CALL コマンドから呼び出されたサブプログラムが,実行中の実行時ライブラリ・ルーチンによってロックされている資源を要求するときです。非タスキング・プログラムにおいてこういった状況が生じないようにするには,Ada の文を実行する直前,または実行した直後に CALL コマンドを入力してください。しかし,この方法では,タスキング・プログラムでのデッドロックの発生を完全に防ぐことはできません。呼び出しの時点で他の何らかのタスクが実行時ライブラリ・ルーチンを実行している可能性があるからです。タスキング・プログラムで CALL コマンドを使用しなければならない場合は,呼び出されるサブプログラムがタスキング操作や入出力操作を何も実行しないようにすると,デッドロックを避けることができます。

C.4 BASIC

次の各サブトピックでは,デバッガによる BASIC のサポートについて説明します。

C.4.1 言語式の演算子

言語式でサポートされている BASIC の演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算,文字列の連結
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 ** べき乗
挿入辞 ^ べき乗
挿入辞 = 等値
挿入辞 <> 不等
挿入辞 >< 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 => 以上
挿入辞 < 小なり
挿入辞 <= 以下
挿入辞 =< 以下
接頭辞 NOT ビット単位のNOT
挿入辞 AND ビット単位のAND
挿入辞 OR ビット単位のOR
挿入辞 XOR ビット単位の排他的論理和
挿入辞 IMP ビット単位の含意
挿入辞 EQV ビット単位の同値


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.