日本-日本語
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 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
デバッガ説明書


目次 索引



これらのハンドラはデバッガによって制御されます。これらのハンドラは,アプリケーションで宣言されたハンドラが例外を処理していなければ,デバッガに最終的に制御を戻し, DBG> プロンプトを表示します。そうでない場合は,デバッグ・セッションは終了し, DCLコマンド・インタプリタに制御が引き渡されます。

最終ハンドラは,呼び出しスタックの最終フレームであり,これら2つのハンドラのうち最初に起動されるハンドラです。次の例は,処理されていない例外が例外ブレークポイントから最終ハンドラに伝えられ場合,どのように処理されるかを示しています。


DBG> SET BREAK/EXCEPTION
DBG> GO
   .
   .
   .
%SYSTEM-F-INTDIV, arithmetic trap, integer divide by zero at PC=0000066C, PSL=03C00022 
break on exception preceding TEST\%LINE 13 
     6:         X := 3/Y;
DBG> GO
%SYSTEM-F-INTDIV, arithmetic trap, integer divide by zero at PC=0000066C, PSL=03C00022
DBG>

この例では,最初のINTDIVメッセージは1次ハンドラによって発行されます。2つ目のメッセージは最終ハンドラによって発行され,その後最終ハンドラによりDBG>プロンプトが表示されています。

ラスト・チャンス・ハンドラは,呼び出しスタックの破損のために最終ハンドラが制御を得ることができなかった場合にだけ起動されます。次に例を示します。


DBG> DEPOSIT %FP = 10
DBG> GO
   .
   .
   .
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual address=0000000A, PC=0000319C, PSL=03C00000 
%DEBUG-E-LASTCHANCE, stack exception handlers lost, re-initializing stack
DBG>

キャッチオール・ハンドラはオペレーティング・システムの一部であり,ラスト・チャンス・ハンドラが制御を得ることができなかった場合に起動されます。キャッチオール・ハンドラはレジスタのダンプを作成します。デバッガがユーザ・プログラムを制御している場合に起動されることはありません。デバッガを使用せずにプログラムを実行しているとき,プログラムでエラーが検出されると起動されます。

デバッグ・セッションの間,レジスタ・ダンプが現れ DCL レベル ($) に戻った場合は,弊社のサポート要員にご連絡ください。

14.5.4 例外関連の組み込みシンボル

例外がシグナル通知された場合,デバッガは次の例外関連の組み込みシンボルを設定します。

シンボル 説明
%EXC_FACILITY 現在の例外を発行したファシリティの名前
%EXC_NAME 現在の例外の名前
%ADAEXC_NAME 現在のAda例外の名前 (Ada プログラムの場合のみ )
%EXC_NUMBER 現在の例外の番号
%EXC_SEVERITY 現在の例外の重大度コード

これらのシンボルを次のように使用することができます。

  • 現在の例外の条件コードのフィールドに関する情報を取得する。

  • 例外ブレークポイントまたは例外トレースポイントを修飾し,ある種の例外でだけ検出されるようにする。

次に,これらのシンボルの使用例を示します。 WHEN 句の条件式は言語固有ですので注意してください。


DBG> EVALUATE %EXC_NAME
'ACCVIO'
DBG> SET TRACE/EXCEPTION WHEN (%EXC_NAME = "ACCVIO")
DBG> EVALUATE %EXC_FACILITY
'SYSTEM'
DBG> EVALUATE %EXC_NUMBER
12
DBG> EVALUATE/CONDITION_VALUE %EXC_NUMBER
%SYSTEM-F-ACCVIO, access violation, reason mask=01, virtual address=FFFFFF30, PC=00007552, PSL=03C00000
DBG> SET BREAK/EXCEPTION WHEN (%EXC_NUMBER = 12)
DBG> SET BREAK/EXCEPTION WHEN (%EXC_SEVERITY .NE. "I" .AND. %EXC_SEVERITY .NE. "S")



14.6 終了ハンドラのデバッグ

終了ハンドラは,イメージがシステム・サービス$EXITを要求したり,実行が終了したりしたときに呼び出されるプロシージャです。ユーザ・プログラムは1つまたは複数の終了ハンドラを宣言することができます。デバッガは常に自分自身の終了ハンドラを宣言します。

プログラム終了時,アプリケーションで宣言された終了ハンドラがすべて実行されたあとにデバッガの終了ハンドラが実行されます。

アプリケーションで宣言された終了ハンドラをデバッグするには,次の手順に従ってください。

  1. デバッグする終了ハンドラにブレークポイントを設定する。

  2. 次のいずれか1つの方法で終了ハンドラを実行する。

    • 終了ハンドラを起動する命令をプログラム内に指定する。通常は $EXIT を呼び出す。

    • プログラムを終了させる。

    • EXIT コマンドを入力する。QUIT コマンドはユーザが宣言した終了ハンドラを実行しないので注意する。


    終了ハンドラが実行されると,ブレークポイントが有効になり,制御がデバッガに戻る。続いてコマンドの入力を要求するプロンプトが表示される。

SHOW EXIT_HANDLERS コマンドは,ユーザ・プログラムで宣言した終了ハンドラを表示します。終了ハンドラのルーチンは,呼び出された順番に表示されます。ルーチン名は可能であればシンボルとして表示されます。そうでない場合はアドレスが表示されます。デバッガの終了ハンドラは表示されません。次に例を示します。


DBG> SHOW EXIT_HANDLERS
exit handler at STACKS\CLEANUP 
exit handler at BLIHANDLER\HANDLER1
DBG>



14.7 ASTドライブ式プログラムのデバッグ

プログラムは,非同期システム・トラップ (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 および I64 のみ)

OpenVMS Alpha システムおよび I64 システムの場合,デバッガは,変換されたイメージのデバッグをサポートしてしません。変換されたイメージをデバッグする必要があるときは,Delta/XDelta デバッガを使用してください。このデバッガの詳細については,『OpenVMS Delta/XDelta Debugger Manual』を参照してください。

14.9 同期化または通信機能を実行するプログラムのデバッグ

同期化または通信を実行する一部のプログラムでは,デバッグで問題が発生することがあります。たとえば,デバッグ中のアプリケーションで $DEQ システム・サービス呼び出しに LCK$M_DEQALL 修飾子が含まれている場合 ( この修飾子はユーザ・プロセス (カーネル) のデバッガの部分とデバッガのメイン・プロセス間の通信リンクを破壊する ) などです。

この問題を回避するには,省略時のモードやマルチプロセス・モードではなく,制限された 1 プロセス・モードを使用して,このアプリケーションをデバッグします。 1 プロセス・モードを設定するには,次のコマンドを使用します。


$ DEFINE DBG$PROCESS NONE



14.10 インライン・ルーチンのデバッグ

OpenVMS システムでは,デバッガはインライン・ルーチンのデバッグをサポートしません。インライン・ルーチンをデバッグしようとすると,次の例に示すように,デバッガはルーチンにアクセスできないことを示すメッセージを出力します。


%DEBUG-E-ACCESSR, no read access to address 00000000

この問題を回避するには,/NOOPTIMIZE 修飾子を使用してプログラムをコンパイルします。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡