Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


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 ビット単位の同値

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

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

シンボル 構造
() 添字指定
:: レコードの構成要素の選択

C.3.3 データ型

サポートされている BASIC のデータ型を次に示します。

BASIC のデータ型 VMS のデータ型名
BYTE バイト整数(B)
WORD ワード整数(W)
LONG ロングワード整数(L)
SINGLE F 浮動小数点数(F)
DOUBLE D 浮動小数点数(D)
GFLOAT G 浮動小数点数(G)
HFLOAT(VAX 固有) H 浮動小数点数(H)
DECIMAL パック 10 進数(P)
STRING ASCII テキスト(T)
RFA (なし)
RECORD (なし)
配列 (なし)

C.3.4 デバッグのためのコンパイル

BASIC 環境でプログラムに変更を加えてから,そのプログラムを保存したり置換したりしないまま,/DEBUG 修飾子を使用してコンパイルしようとすると,"Unsaved changes,no source line debugging available"(変更を保存していないのでデバッグにソース行を使用できません)という BASIC のエラーが通知されます。この問題を防ぐには,プログラムを保存または置換してから,/DEBUG 修飾子を使用してプログラムを再コンパイルしてください。

C.3.5 定数

[radix]"numeric-string"[type] という形式("12.34"GFLOAT など)や,n% という形式(整数 25 の 25% など)の BASIC の定数は,デバッガの式ではサポートされていません。

C.3.6 式の評価

BASIC 言語でオーバフローする式であっても,デバッガが評価する場合に必ずオーバフローするとはかぎりません。BASIC の規則でオーバフローになる場合でも,デバッガは数値的に正しい結果を計算しようとします。この違いは,10 進数を計算するときに特に影響があります。

C.3.7 行番号

デバッグ・セッションではソース・コード・ディスプレイに表示される連続した行番号を参照しますが,この行番号を生成するのはコンパイラです。BASIC プログラムに他のファイルからコードを取り込んだり,付加したりする場合,取り込まれたコードの行にもコンパイラによって順番に行番号が付けられます。

C.3.8 ルーチンへのステップ

STEP/INTO コマンドは,外部関数をチェックするのに便利です。しかし,内部サブルーチンや DEF で実行を停止するのにこのコマンドを使用すると,デバッガは最初に実行時ライブラリ(RTL)のルーチン内の命令をステップ実行するので,有用な情報は何も得られません。次の例では,Print_routine を呼び出す 8 行目で実行が一時停止されます。


    ...
->  8  GOSUB Print_routine 
    9  STOP 
    ...
   20  Print_routine: 
   21    IF Competition = Done 
   22      THEN PRINT "The winning ticket is #";Winning_ticket 
   23      ELSE PRINT "The game goes on." 
   24    END IF 
   25  RETURN 

STEP/INTO コマンドを実行すると,デバッガは適切な RTL コード内の命令をステップ実行して,表示のために使用できるソース行がないことをユーザに伝えてきます。一方,STEP コマンドだけを使用すると,デバッガは Print_routine への呼び出しを通り越して,直接ソース行の 9 行目に進みます。サブルーチンまたは DEF 関数のソース・コードをチェックするには,ルーチンのラベルにブレークポイントを設定してください。たとえば,SET BREAK PRINT_ROUTINE コマンドを入力します。こうすると,正確にルーチンの開始地点この例では 20 行目で実行を一時停止してから,コード内の命令を直接ステップ実行することができます。

C.3.9 シンボル参照

単一の BASIC プログラム内の変数名とラベル名は,すべて固有のものでなければなりません。固有でない場合,デバッガはシンボルのあいまいさを解消できません。

C.3.10 ウォッチポイント

BASIC でウォッチポイントを設定できるのは,COMMON 文または MAP 文で宣言されている変数(静的変数)に対してだけです。DECLARE 文で明示的に宣言されている変数にウォッチポイントを設定することはできません。

C.4 BLISS

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

C.4.1 言語式の演算子

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

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


前へ 次へ 目次 索引