library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


C.2.10.3 処理される例外と例外ハンドラのモニタ

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.2.11 データの検査と操作

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

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

C.2.11.1 レコード

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

C.2.11.2 アクセス型

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

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


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.2.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.2.13 シンボル検索規則

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

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

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


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

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

C.2.14 モジュールの設定

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

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

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

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

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

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

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

C.2.14.1 パッケージ本体のためのモジュールの設定

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

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

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

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


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

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

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

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

C.2.16 CALLコマンド

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

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

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

C.3 BASIC

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

C.3.1 言語式の演算子

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

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


前へ 次へ 目次 索引