日本-日本語
日本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
デバッガ説明書


目次 索引



省略時の設定では,ユーザ・プログラムは,弊社が提供しているいくつかの共用可能イメージ ( たとえば,実行時ライブラリ・イメージ LIBRTL.EXE など ) とリンクされる場合があります。この節では,ユーザ定義の共用可能イメージをデバッグするときに,前に説明した概念をどのように拡張するかについて説明します。

共用可能イメージは,直接実行することを意図したものではありません。共用可能イメージは最初に,実行可能なイメージのリンク時の入力として指定しなければなりません。リンクされた共用可能イメージは,実行可能なイメージの実行時にロードされます。共用可能イメージをデバッグするために,それをインストールする必要はありません。代わりに,論理名を割り当てることによって,プライベート・コピーをデバッグすることができます。

共用可能イメージのリンクについての詳しい説明は, 『OpenVMS Linker Utility Manual』 を参照してください。

5.4.1 共用可能イメージをデバッグするためのコンパイルとリンク

共用可能イメージをデバッグするためのコンパイル作業およびリンク作業の基本的な手順は,次のとおりです。

  1. /DEBUG 修飾子を使用して,メイン・イメージと共用可能イメージのソース・ファイルをコンパイルする。

  2. /SHAREABLE コマンド修飾子および /DEBUG コマンド修飾子を使用して共用可能イメージをリンクする。そのとき,そのイメージのユニバーサル・シンボルを宣言する。ユニバーサル・シンボルは,ある共用可能イメージ内に定義され,別のイメージから参照されるグローバル・シンボルである。

  3. メイン・イメージに対して共用可能イメージをリンクする。そのとき,リンカ・オプションに /SHAREABLE ファイル修飾子を使用して,共用可能イメージを指定する。/DEBUG コマンド修飾子も指定する。

  4. 共用可能イメージのローカル・コピーを指す論理名を定義する。このとき,イメージ名だけでなく装置名およびディレクトリ名も指定しなければならない。そうしないと,イメージ・アクティベータは,システムの省略時の共用可能イメージ・ライブラリ・ディレクトリである SYS$SHARE 内からその名前のイメージを検索する。

  5. メイン・イメージをデバッガの制御下に置く。共用可能イメージは実行時にロードされる。

これらの手順を次の例に示します。この例では,MAIN.FOR と SUB1.FOR が,実行可能なメイン・イメージのソース・ファイルです。また,SHR1.FOR と SHR2.FOR が,デバッグされる共用可能イメージのソース・ファイルです。

第 5.1 節 で説明したように,各イメージのソース・ファイルをコンパイルします。

$ FORTRAN/NOOPT/DEBUG MAIN,SUB1
$ FORTRAN/NOOPT/DEBUG SHR1,SHR2

Alpha プロセッサでは,LINK コマンドにシンボル・ベクタ・オプションを使用して,共用可能イメージを作成しユニバーサル・シンボルを指定します。次に例を示します。

$ LINK/SHAREABLE/DEBUG SHR1,SHR2,SYS$INPUT:/OPTIONS
SYMBOL_VECTOR=(SHR_ROUT=PROCEDURE) [Ctrl/Z] 

上記のコマンド例の意味は,次のとおりです。

  • /SHAREABLE コマンド修飾子は,オブジェクト・ファイル SHR1.OBJ と SHR2.OBJ から共用可能イメージ SHR1.EXE を作成する。

  • SYS$INPUT: の後ろの /OPTIONS 修飾子によって,ユニバーサル・シンボル SHR_ROUT が指定可能になる。

  • /DEBUG 修飾子は,SHR1.EXE のデバッグ・シンボル・テーブル (DST) とグローバル・シンボル・テーブル (GST) を作成し,それらをイメージ内に取り込む。GST には,ユニバーサル・シンボル SHR_ROUT が含まれる。

これで,共用可能イメージ SHR1.EXE が現在の省略時のディレクトリに作成されます。SHR1.EXE は共用可能イメージなので,ユーザが明示的に実行することはありません。代わりに,実行可能なメイン・イメージとリンクします。

$ LINK/DEBUG MAIN,SUB1,SYS$INPUT:/OPTIONS
SHR1.EXE/SHAREABLE [Ctrl/Z]
$

上記のコマンド例の意味は,次のとおりです。

  • LINK コマンドは,MAIN.OBJ と SUB1.OBJ から実行可能なイメージ MAIN.EXE を作成する。

  • /DEBUG 修飾子は,MAIN.EXE の DST と GST を作成し,それらをイメージ内に取り込む。

  • SHR1.EXE の後ろの /SHAREABLE 修飾子は,SHR1.EXE が MAIN.EXE の共用可能イメージとしてリンクされることを意味する。

作成されたメイン・イメージ MAIN.EXE を実行すると,リンクされたすべての共用可能イメージが,実行時にロードされます。しかし省略時の設定では,イメージ・アクティベータは,システムの省略時の共用可能イメージ・ライブラリ・ディレクトリである SYS$SHARE 内から共用可能イメージを検索します。したがって,ユーザは,論理名 SHR1 を定義して,それが現在の省略時のディレクトリ内に存在する SHR1.EXE を指すようにしなければなりません。このとき,必ず装置およびディレクトリを指定してください。

$ DEFINE SHR1 SYS$DISK:[]SHR1.EXE

これで,デバッガの RUN コマンドに MAIN を指定することによって,デバッガ起動後に MAIN と SHR1 をデバッガの制御下に置くことができます。

$  DEBUG/KEEP 
            Debugger Banner and Version Number 
DBG> RUN MAIN



5.4.2 共用可能イメージ内のシンボルへのアクセス

第 5.1 節第 5.2 節 ,および 第 5.3 節 で説明したすべての概念は,単一イメージのモジュール,すなわち実行可能なメイン・イメージに適用されます。ここでは,共用可能イメージのデバッグに固有の追加情報を提供します。

第 5.4.1 項 で説明したように,デバッグ用に共用可能イメージをリンクすると,リンカは各イメージに DST と GST を作成します。共用可能イメージの GST には,ユニバーサル・シンボルだけが含まれます。メモリを節約するために,デバッガはイメージが設定されたときだけ,そのイメージの RST を作成します。イメージは,動的に,または SET IMAGE コマンドの入力によって設定されます。

SHOW IMAGE コマンドは,ユーザ・プログラムにリンクされているすべての共用可能イメージを示し,設定されているイメージや現在のイメージを識別します (現在のイメージの定義については, 第 5.4.2.2 項 を参照)。プログラムがデバッガの制御下に置かれたときには,最初にメイン・イメージだけが設定されます。

次の各項では,デバッガが,プログラムの実行中に動的にイメージを設定する方法と,実行に関係なく任意のイメージ内のシンボルへのアクセスを可能にする方法を説明します。

インストールされた書き込み可能な共用可能イメージ内にウォッチポイントを設定する方法については, 第 3.4.3.4 項 を参照してください。

省略時の設定では,動的モードが有効になっています。したがって,実行が中断したときにはいつも,停止している位置のイメージおよびモジュールが設定されます (それらのモジュールがまだ設定されていない場合)。

動的モードを使用すれば,次のようなシンボルへのアクセスが自動的に可能となります。

  • 実行が停止しているイメージ内のすべての設定されているモジュールで定義されているシンボルの参照

  • そのイメージの GST 内の任意のユニバーサル・シンボルの参照

SET MODULE コマンドを使用して,そのイメージ内の他のモジュールを設定すると,ユーザはそのイメージ内の任意のシンボルを参照することができます。

いったん設定されたイメージは,CANCEL IMAGE コマンドによって取り消されるまで,そのまま設定されています。設定されたイメージおよびモジュールの数が増えたため,デバッガの処理速度が低下する場合は,CANCEL IMAGE コマンドを使用してイメージを取り消します。また,SET MODE NODYNAMIC コマンドを使用して,動的モードを無効にすることもできます。

ユーザまたはデバッガが最後に設定したイメージを 現在のイメージ と言います。現在のイメージは,シンボル検索のためのデバッグ・コンテキストです。したがって,次のコマンドを使用した場合,ユーザは現在のイメージ内に定義されているシンボルだけを参照することができます。

DEFINE/ADDRESS
DEFINE/VALUE
DEPOSIT
EVALUATE
EXAMINE
TYPE
(SET,CANCEL) BREAK
(SET,SHOW,CANCEL) MODULE
(SET,CANCEL) TRACE
(SET,CANCEL) WATCH
SHOW SYMBOL

SHOW BREAK,SHOW TRACE,SHOW WATCH の各コマンドは,すべてのイメージ内に設定されている任意のブレークポイント,トレースポイント,またはウォッチポイントを示すことに注意してください。

現在のイメージ以外のイメージ内に存在するシンボルを参照するには, SET IMAGE コマンドを使用して現在のイメージを指定したあと, SET MODULE コマンドを使用して,そのシンボルが定義されているモジュールを設定します。SET IMAGE コマンドは,モジュールを設定しません。次のサンプル・プログラムは,これらの概念を示したものです。

サンプル・プログラムは,メイン・イメージ PROG1 と共用可能イメージ SHR1 からなります。現在,プログラムがデバッガの制御下に置かれ,実行がイメージ PROG1 内のメイン・プログラム単位で停止していると想定します。ここで,ルーチン ROUT2 にブレークポイントを設定したいとします。 ROUT2 は,イメージ SHR1 内のあるモジュールで定義されています。

ROUT2 にブレークポイントを設定しようとすると,デバッガは現在のイメージ PROG1 内から ROUT2 を検索します。

DBG> SET BREAK ROUT2
%DEBUG-E-NOSYMBOL, symbol 'ROUT2' is not in symbol table
DBG>

SHOW IMAGE コマンドは,イメージ SHR1 の設定が必要であることを示しています。

DBG> SHOW IMAGE
 image name           set    base address    end address 
 
*PROG1                yes    00000200        000009FF 
 SHR1                 no     00001000        00001FFF 
 
 total images: 2           bytes allocated: 32856
DBG> SET IMAGE SHR1
 
DBG> SHOW IMAGE
 image name           set    base address    end address 
 
 PROG1                yes    00000200        000009FF 
*SHR1                 yes    00001000        00001FFF 
 
 total images: 2           bytes allocated: 41948
DBG>

これで,SHR1 が設定され,現在のイメージになりました。しかし,SET IMAGE コマンドはモジュールを設定しないので,ユーザはブレークポイントを設定する前に, ROUT2 が定義されているモジュールを設定しなければなりません。

DBG> SET BREAK ROUT2
%DEBUG-E-NOSYMBOL, symbol 'ROUT2' is not in symbol table
DBG> SET MODULE/ALL
DBG> SET BREAK ROUT2
DBG> GO
break at routine ROUT2 
10:     SUBROUTINE ROUT2(A,B)
DBG>

イメージ SHR1 とそのすべてのモジュールが設定され, ROUT2 でブレークポイントに到達しています。あとは,通常の方法でデバッグすることができます。たとえば,ルーチン内の命令のステップ実行や変数の検査などです。

いったん設定されたイメージおよびそのイメージ内のモジュールは,新しい現在のイメージが設定されても,そのまま設定されています。しかし,任意の一時点に複数のシンボルにアクセスできるのは,それらのシンボルが現在のイメージ内に存在するときだけです。

次の段落では,実行時ライブラリ,またはシンボル・テーブル情報が生成されていないその他の共用可能イメージ内のユニバーサル・シンボル ( ルーチン名など ) にアクセスする方法について説明します。この方法を使用すれば,ユーザはたとえば CALL コマンドを使用して, 第 13.7 節 で説明するように実行時ライブラリまたはシステム・サービス・ルーチンを実行できます。

次のコマンド構文を使用して SET MODULE コマンドを入力します。

SET MODULE SHARE$image-name

次に例を示します。

DBG> SET MODULE SHARE$LIBRTL

デバッガは,ユーザ・プログラム内の各共用可能イメージに仮モジュールを作成します。これらの共用可能イメージ・モジュールの名前には,接頭辞 "SHARE$" が付いています。 SHOW MODULE/SHARE コマンドは,現在のイメージ内のモジュールだけでなく,これらの共用可能イメージ・モジュールも示します。

SET MODULE コマンドによって,いったん共用可能イメージ・モジュールが設定されると,ユーザは,そのイメージ内のすべてのユニバーサル・シンボルにアクセスできます。次のコマンドは,LIBRTL 内のすべてのユニバーサル・シンボルをリストします。

DBG> SHOW SYMBOL * IN SHARE$LIBRTL
   .
   .
   .
routine SHARE$LIBRTL\STR$APPEND 
routine SHARE$LIBRTL\STR$DIVIDE 
routine SHARE$LIBRTL\STR$ROUND
   .
   .
   .
routine SHARE$LIBRTL\LIB$WAIT 
routine SHARE$LIBRTL\LIB$GETDVI
   .
   .
   .

ユーザは,これらのユニバーサル・シンボルを,たとえば CALL コマンドや SET BREAK コマンドなどに指定できます。

SET MODULE コマンドを使用して共用可能イメージ・モジュールを設定すると,そのイメージのユニバーサル・シンボルが実行時シンボル・テーブルにロードされます。その結果,これらのシンボルは現在のイメージから参照できるようになります。しかし,そのイメージ内の他のシンボル ( ローカル・シンボルやグローバル・シンボル ) は,現在のイメージからは参照できません。すなわち,ユーザのデバッグ・コンテキストは,現在のイメージに設定されたままです。

5.4.3 常駐イメージのデバッグ (Alpha のみ)

常駐イメージは,効率を高めることができるように特定の方法で作成され,インストールされた共用可能モジュールです。このようなイメージを作成するには,シンボル・テーブルを除いてイメージをリンクし,システム空間でイメージを実行する必要があります。このようにして作成したイメージは,デバッグが困難になります。次の手順では,もっと簡単にデバッグできる常駐イメージを作成します。

  1. 共用可能イメージをコンパイルする。次の例を参照。

    $ CC/DEBUG/NOOPTIMIZE RESIDENTMODULE.C
    

  2. /DSF 修飾子を使用して共用可能イメージをリンクする。次の例を参照。

    $ LINK/NOTRACEBACK/SHAREABLE/SECTION_BINDING/DSF RESIDENTMODULE 
    


    イメージのリンクについては,『OpenVMS Linker Utility Manual』を参照。

  3. インストール済み常駐イメージを作成する。Install ユーティリティの使い方については,『OpenVMS システム管理ユーティリティ・リファレンス・マニュアル (上巻 ) 』を参照。常駐イメージの詳細については,『OpenVMS システム管理者マニュアル (下巻)』を参照。

  4. 常駐イメージを呼び出すプログラムをコンパイルする。次の例を参照。

    $ CC/DEBUG/NOOPTIMIZE TESTPROGRAM
    

  5. 常駐イメージを呼び出す実行可能イメージを作成する。次の例を参照。

    $ LINK/DSF TESTPROGRAM
    

  6. 常駐イメージのプライベート・コピーを作成する。次の例を参照。

    $ COPY SYS$LIBRARY:RESIDENTMODULE.EXE []RESIDENTMODULE.EXE
    

  7. 常駐イメージのプライベート・コピーを指す論理名を定義する。次の例を参照。

    $ DEFINE RESIDENTMODULE []RESIDENTMODULE
    

  8. テスト・プログラム用の .DSF ファイルと常駐モジュール用の .DSF ファイルの両方が同じディレクトリに格納されていることを確認する。

  9. .DSF ファイルを格納したディレクトリを指すように, DBG$IMAGE_DSF_PATH を定義する。

  10. デバッガを起動する。次の例を参照。

    $ DEBUG/KEEP TESTPROGRAM
    

これで実行可能イメージと常駐イメージに対して,すべてのデバッグ・オプションを使用できるようになります。


目次 索引

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