日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
14.6 終了ハンドラのデバッグ |
終了ハンドラは,イメージがシステム・サービス$EXITを要求したり,実行が終了したりしたときに呼び出されるプロシージャです。ユーザ・プログラムは1つまたは複数の終了ハンドラを宣言することができます。デバッガは常に自分自身の終了ハンドラを宣言します。
プログラム終了時,アプリケーションで宣言された終了ハンドラがすべて実行されたあとにデバッガの終了ハンドラが実行されます。
アプリケーションで宣言された終了ハンドラをデバッグするには,次の手順に従ってください。
終了ハンドラが実行されると,ブレークポイントが有効になり,制御がデバッガに戻る。続いてコマンドの入力を要求するプロンプトが表示される。
SHOW EXIT_HANDLERS コマンドは,ユーザ・プログラムで宣言した終了ハンドラを表示します。終了ハンドラのルーチンは,呼び出された順番に表示されます。ルーチン名は可能であればシンボルとして表示されます。そうでない場合はアドレスが表示されます。デバッガの終了ハンドラは表示されません。次に例を示します。
DBG> SHOW EXIT_HANDLERS exit handler at STACKS\CLEANUP exit handler at BLIHANDLER\HANDLER1 DBG> |
プログラムは,非同期システム・トラップ (AST) を明示的に使用したり,システムサービス,またはアプリケーションで定義された AST ルーチンを呼び出す実行時ライブラリ (RTL) ルーチンを呼び出すことによって,暗黙に使用したりできます。 第 14.7.1 項 では,ユーザのプログラムから発行された AST の実行要求を禁止したり許可にしたりすることによってデバッグを行う方法を説明します。
14.7.1 ASTの実行要求の禁止と許可
AST ドライブ式プログラムのデバッグは混乱することがあります。デバッガが実行を続けている間 ( コマンドを処理したり,例外をトレースしたり,情報を表示したりしている間 ) に,デバッグ中のプログラムからの割り込みが発生し,処理されないことがあるからです。
省略時の設定では,AST の実行要求はプログラムが実行されている間は許可されています。DISABLE AST コマンドはプログラムが実行されている間の AST の実行要求を禁止し,このような割り込みの発生をキューに登録します。
AST の実行要求は,デバッガの実行中は常に禁止されます。
静的ウォッチポイントが有効な場合,デバッガは,システム・サービス呼び出しの直前に,静的ウォッチポイント,AST,スレッド切り替えをオフにします。デバッガは,システム・サービス呼び出しが終了した直後に再起動します。詳細については,SET WATCH コマンドの項を参照してください。 ENABLE AST コマンドは,待ち状態にある AST の実行要求も含め, AST の実行要求を再び許可します。 SHOW AST コマンドは,AST の実行要求が禁止されているか許可されているかを示します。
CALL コマンドで呼び出されたルーチンの実行中,AST の実行要求を制御するには,/[NO]ASC 修飾子を使用します。CALL/AST コマンドは,呼び出されたルーチン内の AST の実行要求を許可します。 CALL/NOAST コマンドは,呼び出されたルーチン内の AST の実行要求を禁止します。CALL コマンドで /AST も /NOAST も指定しない場合は,前に DISABLE AST コマンドを入力していないかぎり,AST の実行要求は許可されます。
14.8 変換されたイメージのデバッグ (Alpha および Integrity のみ)
OpenVMS Alpha システムおよび Integrity システムの場合,デバッガは,変換されたイメージのデバッグをサポートしてしません。変換されたイメージをデバッグする必要があるときは,Delta/XDelta デバッガを使用してください。このデバッガの詳細については,『HP OpenVMS Delta/XDelta Debugger Manual』を参照してください。
同期化または通信を実行する一部のプログラムでは,デバッグで問題が発生することがあります。たとえば,デバック中のアプリケーションで $DEQ システム・サービス呼び出しに LCK$M_DEQALL 修飾子が含まれている場合などです (この修飾子は,ユーザ・プロセス (カーネル) のデバッガの部分とデバッガのメイン・プロセスとの間の通信リンクを破壊します)。
OpenVMS システムでは,デバッガはインライン・ルーチンのデバッグをサポートしません。インライン・ルーチンをデバッグしようとすると,次の例に示すように,デバッガはルーチンにアクセスできないことを示すメッセージを出力します。
14.9 同期化または通信機能を実行するプログラムのデバッグ
14.10 インライン・ルーチンのデバッグ
%DEBUG-E-ACCESSR, no read access to address 00000000 |
この問題を回避するには,/NOOPTIMIZE 修飾子を使用してプログラムをコンパイルします。
目次 | 索引 |
|