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.3 データ型

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

Ada のデータ型 VMS のデータ型名
INTEGER ロングワード整数(L)
SHORT_INTEGER ワード整数(W)
SHORT_SHORT_INTEGER バイト整数(B)
SYSTEM.UNSIGNED_QUADWORD クォドワード符号なし(QU)
SYSTEM.UNSIGNED_LONGWORD ロングワード符号なし(LU)
SYSTEM.UNSIGNED_WORD ワード符号なし(WU)
SYSTEM.UNSIGNED_BYTE バイト符号なし(BU)
FLOAT F浮動小数点数(F)
SYSTEM.F_FLOAT F浮動小数点数(F)
SYSTEM.D_FLOAT D浮動小数点数(D)
LONG_FLOAT LONG_FLOAT (D_FLOAT) プラグマが有効のときは, D浮動小数点数(D)。
LONG_FLOAT (G_FLOAT) プラグマが有効のときは,G浮動小数点数(G)。
SYSTEM.G_FLOAT G浮動小数点数(G)
SYSTEM.H_FLOAT (VAX 固有) H浮動小数点数(H)
LONG_LONG_FLOAT (VAX 固有) H浮動小数点数(H)
IEEE_SINGLE_FLOAT (Alpha 固有) S浮動小数点数(FS)
IEEE_DOUBLE_FLOAT (Alpha 固有) T浮動小数点数(FT)
固定 (なし)
STRING ASCIIテキスト(T)
BOOLEAN 境界合わせされたビット列(V)
BOOLEAN 境界合わせされていないビット列(VU)
列挙 値が符号なしバイトと一致する列挙型は,バイト符号なし(BU)。値が符号なしワードと一致する列挙型は,ワード符号なし(WU)。それ以外の列挙型に対応するオペレーティング・システムのデータ型はない。
配列 (なし)
レコード (なし)
アクセス(ポインタ) (なし)
タスク (なし)

C.2.4 コンパイルとリンク

ユーザのシステムのプログラム・ライブラリ ADA$PREDEFINED にある, Ada の定義済みユニットは /NODEBUG 修飾子を使用してコンパイルされています。定義済みユニットの中で宣言されている名前をデバッガで参照するにはその前に,定義済みユニットのソース・ファイルを ACS EXTRACT SOURCE コマンドでコピーしなければなりません。そして,コピーしたファイルを /DEBUG 修飾子を使用してコンパイルし,適切なライブラリにしてから,/DEBUG 修飾子を付けてプログラムを再リンクする必要があります。

Ada の各コンパイル・コマンドで /NODEBUG 修飾子を使用した場合,デバッグのためにモジュールに含まれるのはグローバル・シンボル・レコードだけです。このときのグローバル・シンボルは,プログラムが他言語のモジュールへエクスポートする名前です。プログラムは次の Ada のエクスポート・プラグマを使用して名前をエクスポートします。

EXPORT_PROCEDURE
EXPORT_VALUED_PROCEDURE
EXPORT_FUNCTION
EXPORT_OBJECT
EXPORT_EXCEPTION
PSECT_OBJECT

ACS LINK コマンドで /DEBUG 修飾子を使用すると,リンカは,実行可能なイメージ内の特定のユニットのクロージャにデバッグの情報をすべて含めます。

C.2.5 ソースの表示

Ada プログラム固有の次の理由から,ソース・コードを表示できないことがあります。

Ada プログラムでソース・コードの表示を制御する方法を次に説明します。

コンパイラ・コマンドの /COPY_SOURCE 修飾子 ( 省略時設定 ) が有効な状態でプログラムをコンパイルした場合,表示される Ada のソース・コードは,プログラムを新しくコンパイルしたときのプログラム・ライブラリにあるソース・ファイルをコピーして取得されます。/NOCOPY_SOURCE 修飾子を使用してプログラムをコンパイルした場合,表示されるソース・コードは,プログラムのコンパイル単位に対応する外部ソース・ファイルから取得されます。

コピーされるソース・ファイルのファイル指定,または外部ソース・ファイルのファイル指定は,対応するオブジェクト・ファイルに埋め込まれています。たとえば,コンパイル単位をコピーするのに ACS の COPY UNIT コマンドを使用しても,あるいは,ライブラリ全体をコピーするのに DCL の COPY コマンドか BACKUP コマンドを使用しても,デバッガはコピーされたソース・ファイルから元のプログラム・ライブラリを検索します。コピー後に元のコンパイル単位を修正した場合,またはコピー後に元のライブラリを削除した場合,デバッガはコピーされた元のソース・ファイルを見つけることができません。同様に,外部ソース・ファイルを別のディスクやディレクトリに移動したときも,デバッガは元のソース・ファイルを見つけられません。

このような場合は,ソースの表示のための正しいファイルを検索するために, SET SOURCE コマンドを使用します。プログラム・ライブラリやソース・コードの複数のディレクトリを示す検索リストを指定することができます。次に例を示します。ADA$LIB は,プログラム・ライブラリ・マネージャが現在のプログラム・ライブラリと等しく定義する論理名です。


DBG> SET SOURCE ADA$LIB,DISK:[SMITH.SHARE.ADALIB]

ユーザがデバッガの EDIT コマンドを使用するときにデバッガが取り出す外部ソース・ファイルを検索するための検索リストは, SET SOURCE コマンドでは変更されません。ソース・ファイルを検索する場所を EDIT コマンドで指定するときは,SET SOURCE/EDIT コマンドを使用します。

C.2.6 EDITコマンド

Ada プログラムで省略時にデバッガの EDIT コマンドが取り出す外部ソース・ファイルは,実行を現在一時停止しているコンパイル単位を作成するためにコンパイルされた外部ソース・ファイルです。プログラム・ライブラリ内のコピーされたソース・ファイルは編集しないでください。デバッガはこのソース・ファイルをソースの表示のために使用します。

編集するソース・ファイルのファイル指定は,コンパイル中に,対応するオブジェクト・ファイルに埋め込まれます (/NODEBUG を指定しなかった場合)。コンパイル後にソース・ファイルの配置場所を変更すると,デバッガがそれらのソース・ファイルを見つけられなくなります。

配置場所を変更したときは,デバッガの SET SOURCE/EDIT コマンドを使用すると,デバッガがソース・ファイルを検索する,1 つまたは複数のディレクトリからなる検索リストを指定することができます。次に例を示します。


DBG> SET SOURCE/EDIT [],USER:[JONES.PROJ.SOURCES]

SET SOURCE/EDIT コマンドを使用しても,デバッガがソースの表示に使用するコピー元のソース・ファイルを検索するための検索リストは変更されません。

SHOW SOURCE/EDIT コマンドを使用すると,現在 EDIT コマンドで使用中のソース・ファイル検索リストが表示されます。CANCEL SOURCE/EDIT コマンドを使用すると,現在 EDIT コマンドで使用中のソース・ファイル検索リストが取り消され,省略時の検索モードに戻ります。

C.2.7 GO コマンドと STEP コマンド

Ada プログラムで GO コマンドや STEP コマンドを使用する場合は,次の点に注意してください。

C.2.8 Ada のライブラリ・パッケージのデバッグ

Ada のメイン・プログラム,または Ada のコードを呼び出す Ada 以外のメイン・プログラムが実行されるときに,Ada の実行時ライブラリに対して初期化コードが実行され,プログラムが依存するすべてのライブラリ単位に対して確立コードが実行されます。確立コードは,メイン・プログラムの実行前にライブラリ単位を適切な順序で確立します。ライブラリの仕様と本体,およびそれらのサブユニットもこのプロセスによって確立されます。

ライブラリ・パッケージを確立すると,次の処理が行われます。

Ada プログラムをデバッガの制御下に置くと,初めに,初期化コードの実行前およびライブラリ単位の確立前に実行が一時停止されます。次に例を示します。


DBG> RUN FORMS
Language: ADA, Module: FORMS 
Type GO to reach main program
DBG>

この時点で,GO と入力してメイン・プログラムを開始する前に,注目したいパッケージの仕様や本体にブレークポイントを設定することによって,ライブラリ・パッケージ内の命令を何箇所かステップ実行してチェックすることができます。その後,各パッケージを開始するために GO コマンドを使用します。パッケージの本体にブレークポイントを設定するには,SET BREAK コマンドでパッケージ単位名を指定します。パッケージの仕様にブレークポイントを設定するときは,パッケージ単位名をその後ろにアンダスコア (_) を付けて指定します。

パッケージの本体にブレークポイントを設定しても,その本体に対するデバッガのモジュールが設定されていないときはブレークされません。モジュールが設定されていない場合は,パッケージの仕様のところでブレークされます。このようになるのは,with 句の中で名前を指定されているパッケージの仕様に対するモジュールを,デバッガが自動的に設定するためです。デバッガは,対応するパッケージ本体に対するモジュールを自動的には設定しません ( 付録 C.2.14 項 を参照)。

また,パッケージの仕様の中で宣言されているサブプログラムにブレークポイントを設定するには,パッケージの本体に対するモジュールをユーザが設定する必要があります。

コンパイラは,ライブラリ・パッケージの中で宣言されているサブプログラムに固有の名前を作成しますので注意してください。これらの名前は,オーバロードされた名前です。または,オーバロードされた名前になることもあります。デバッガの出力には,これらの固有の名前が使用されます。また,使用しないと名前があいまいになる場合は,この固有の名前を各コマンドで使用する必要があります。オーバロードされた名前とシンボルの解決についての詳しい説明は, 付録 C.2.15 項 を参照してください。

C.2.9 定義済みブレークポイント

Ada プログラムまたは Ada のコードを呼び出すAda以外のプログラムでデバッガを起動すると,Ada のタスキング例外イベントに対応する 2 つのブレークポイントが自動的に設定されます。これらのブレークポイントは, Ada の実行時ライブラリが存在しているときに,デバッガの初期化中に自動的に設定されます。

この状況で SHOW BREAK コマンドを入力すると,次のようにブレークポイントが表示されます。


DBG> SHOW BREAK
Predefined breakpoint on ADA event "EXCEPTION_TERMINATED" 
    for any value
Predefined breakpoint on ADA event "DEPENDENTS_EXCEPTION" 
    for any value
DBG>

C.2.10 例外のモニタ

Ada プログラムの場合,デバッガは次の 3 種類の例外を認識します。

次の各サブトピックでは,これらの例外をモニタする方法について説明します。

C.2.10.1 すべての例外のモニタ

SET BREAK/EXCEPTION コマンドを使用すると,どの例外または VMS 条件にもブレークポイントを設定することができます。これには,Ada の実行時ライブラリの内部でシグナル通知される特定の VMS 条件も含まれます。これらの条件は言語処理系の機構によるものであり,プログラムの障害を意味するものではありません。また,これらの条件を Ada の例外ハンドラで処理することはできません。プログラムをデバッグ中にこれらの条件が現れる場合は,ブレークポイントを設定するときに,例外の種類を指定することもできます。

SET TRACE/EXCEPTION コマンドの結果,Ada の CONSTRAINT_ERROR 例外のためにトレースポイントが現れるときの例を,次に示します。


DBG> SET TRACE/EXCEPTION
DBG> GO
     ...
%ADA-F-CONSTRAINT_ERRO, CONSTRAINT_ERROR 
-ADA-I-EXCRAIPRI, Exception raised prior to PC = 00000A7C 
trace on exception preceding 
    ADA$RAISE\ADA$RAISE_CONDITION.%LINE 333+12
     ...

内部で例外が発生したサブプログラムを呼び出したとき,または例外発生の対象となったサブプログラムを呼び出したときのトレースバックを SHOW CALLS コマンドで表示する例を次に示します。


DBG> SET BREAK/EXCEPTION DO (SHOW CALLS)
DBG> GO
      ...
%SYSTEM-F-INTDIV, arithmetic trap, integer divide 
     by zero at PC=000008AF, 
PSL=03C000A2 break on exception preceding 
     SYSTEM_OPS.DIVIDE.%LINE 17+6 
     17:      return X/Y;
 module name     routine name       line    rel PC    abs PC 
*SYSTEM_OPS      DIVIDE               17   00000015  000008AF 
*PROCESSOR       PROCESSOR            19   000000AE  00000BAD 
*ADA$ELAB_PROCESSOR 
                 ADA$ELAB_PROCESSOR        00000009  00000809 
                 LIB$INITIALIZE            00000054  00000C36 
 SHARE$ADARTL                              00000000  000398BE 
*ADA$ELAB_PROCESSOR 
                 ADA$ELAB_PROCESSOR        0000001B  0000081B 
                 LIB$INITIALIZE            0000002F  00000C21

この例では,SYSTEM_OPS パッケージの DIVIDE サブプログラムの 17 行目で SS$_INTDIV 条件が発生します。 SS$_INTDIV などのいくつかの条件は Ada のある種の定義済みの例外と等価なものとして処理されるという重要な働きを,この例は示しています。

Ada の定義済みの例外と条件を照合するのは,例外部分を持つすべてのフレーム用に Ada に備えられている条件ハンドラです。したがって,Ada の例外名と等価な名前を持った条件によって例外のブレークポイントまたはトレースポイントが検出された場合,メッセージには,システムの条件コード名 だけ が表示され,対応する Ada の例外名は表示されません。

C.2.10.2 特定の例外のモニタ

例外が発生すると,デバッガは次の組み込みシンボルを設定します。この組み込みシンボルを使用すると,特定の例外が発生したときだけ検出されるように,例外のブレークポイントやトレースポイントを指定することができます。

%EXC_FACILITY 例外を生じたファシリティの名前を示す文字列。Ada の定義済みの例外およびユーザ定義の例外のファシリティ名は,ADA。
%EXC_NAME 例外名を示す大文字の文字列。発生した例外が Ada の定義済みの例外の場合,15 文字を超える分の名前は切り捨てられる。たとえば,CONSTRAINT_ERROR は切り捨てられ, CONSTRAINT_ERRO になる。発生した例外がユーザ定義の例外の場合, %EXC_NAME には "EXCEPTION" という文字列が入り,ユーザ定義の例外名は %ADAEXC_NAME に入る。
%ADAEXC_NAME 発生した例外がユーザ定義の例外の場合, %ADAEXC_NAME にはその例外名を示す文字列が入り,%EXC_NAME には "EXCEPTION" という文字列が入る。発生した例外がユーザ定義の例外ではない場合,%ADAEXC_NAME には空文字列が入り,%EXC_NAME に例外名が入る。
%EXC_NUM 例外の個数。
%EXC_SEVERITY 例外の重大度を示す文字列 ( F,E,W,I,S,または ?)。


前へ 次へ 目次 索引