前へ | 次へ | 目次 | 索引 |
以前に設定したあと無効にしたウォッチポイントを有効にします。
ACTIVATE WATCH [address-expression[,...]]
address-expression
有効にするウォッチポイントを指定します。高級言語を使用している場合,これは通常,変数の名前になります。ワイルドカード文字のアスタリスク(*)は使用できません。代わりに /ALL 修飾子を使用してください。/ALL を指定する場合は,アドレス式は指定できません。
/ALL
すべてのウォッチポイントを有効にします。
ウォッチポイントは SET WATCH コマンドで設定すると有効になります。DEACTIVATE WATCH で無効にした 1 つまたは複数のウォッチポイントを有効にするにはACTIVATE WATCH コマンドを使用します。ウォッチポイントを有効にしたり無効にしたりすることにより,プログラムの実行や再実行のときに,ウォッチポイントを取り消して再設定する手間をかけずに,ウォッチポイントを使用したり使用しなかったりすることができます。
省略時の設定では,RERUN コマンドを実行すると,すべての静的ウォッチポイントの現在の状態(有効か無効か)が保存されます。特定の非静的ウォッチポイントは,(実行を再開する)メイン・プログラム・ユニットを基準にした,ウォッチの対象になっている変数の有効範囲によって保存されることもあり,保存されないこともあります。
ウォッチポイントが有効になっているかを確かめるには,SHOW WATCH コマンドを使用します。
関連コマンド
CANCEL ALL
RERUN
(SET,SHOW,CANCEL,DEACTIVATE)WATCH
#1 |
---|
DBG> ACTIVATE WATCH SUB2\TOTAL |
このコマンドはモジュール SUB2 の中の TOTAL 変数でのウォッチポイントを有効にします。
#2 |
---|
DBG> ACTIVATE WATCH/ALL |
このコマンドは設定したあと無効にしたすべてのウォッチポイントを有効にします。
システム・ダンプ・デバッガで解析するためにシステム・ダンプをオープンします(保持デバッガのみ)。
ANALYZE/CRASH_DUMP dumpfile
dumpfile
解析するシステム・ダンプ・ファイルの名前。ファイル・タイプは .DMP でなければなりません。
システム・ダンプを解析するために OpenVMS Alpha システム・ダンプ・デバッガ(SDD)を起動します。
SDD は概念上はシステム・コード・デバッガ(SCD)に似ています。SCD では実行中のシステムに接続して,システムの実行を制御し,変数の確認と変更を行うことができますが,SDD ではシステム・ダンプに記録されているメモリを解析することができます。
SDD では一般に 2 つのシステムを使用しますが,必要な環境すべてを 1 つのシステム上に設定することも可能です。以下の説明では,2 つのシステムを使用するものと仮定しています。
- ビルド・システム。システム・クラッシュを引き起こしたイメージがビルドされたシステム
- テスト・システム。イメージが実行され,システム・クラッシュが起こったシステム
SCD と同様に,OpenVMS デバッガのユーザ・インタフェースでは,ソース・コードに使われているのとまったく同じ変数名やルーチン名などを指定することができます。また,SDD は,システム・クラッシュの時点で実行されていたソース・コードの位置を表示することができます。
SDD は個々の言語の構文,データ型,演算子,式,有効範囲規則,およびその他の言語要素を認識します。コードまたはドライバが複数の言語で書かれている場合には,デバッグ・セッションの途中でデバッグ・コンテキストの言語を切り替えることが可能です。
SDD を使用するためには,以下の操作を行う必要があります。
- システム・クラッシュを引き起こしているシステム・イメージまたはデバイス・ドライバをビルドする。
- そのシステム・イメージまたはデバイス・ドライバを含むシステムをブートし,システム・クラッシュを引き起こすための手順を実行する。
- システムをリブートし,ダンプ・ファイルを保存する。
- OpenVMS デバッガに統合されている SDD を起動する。
サンプルの SDD セッションを含む SDD の詳しい使い方については,『OpenVMS Alpha System Analysis Tools Manual』を参照してください。
関連コマンド
ANALYZE/PROCESS_DUMP
CONNECT %NODE
SDA
#1 |
---|
DBG> ANALYZE/CRASH_DUMP DBG> |
保持デバッガの中から SDD を起動します。
システム・コード・デバッガで解析するためにプロセス・ダンプをオープンします(保持デバッガのみ)。
ANALYZE/PROCESS_DUMP dumpfile
dumpfile
解析するプロセス・ダンプ・ファイルの名前。ファイル・タイプは .DMP でなければなりません。
/IMAGE_PATH=directory-spec
デバッガがデバッガ・シンボル・テーブル(DST)を含んでいるファイルを探すための検索パスを指定します。ファイルは,ダンプファイルと同じイメージ名を持ち,ファイル・タイプは .DSF または .EXE でなければなりません。たとえば,ダンプ・ファイルにイメージ名 foo.exe が含まれている場合,デバッガは foo.dsf または foo.exe を探します。
(保持デバッガのみ。)システム・コード・デバッガで解析するためにプロセス・ダンプをオープンします。修飾子 /PROCESS_DUMP は必須で,このコマンドをシステム・ダンプ・デバッガ(SDD)を起動するコマンド ANALYZE/CRASH_DUMP と区別する役割を果たしています。
修飾子 /IMAGE_PATH=directory-spec はオプションで,デバッガがデバッガ・シンボル・テーブル(DST)ファイルを探すために使用する検索パスを指定します。デバッガは保存済みプロセス・イメージ・リストからイメージ・リストを構築します。イメージを設定すると(メイン・イメージは自動的に設定されます),デバッガはそのイメージをオープンして DST を探します。
/IMAGE_PATH=directory-spec 修飾子を含めると,デバッガは指定されたディレクトリの中で .DST ファイルを探します。デバッガはまず directory-spec をディレクトリ検索リストの論理名として解釈しようとします。これに失敗すると,デバッガは directory-spec をディレクトリ指定として解釈し,そのディレクトリの中で,対応する .DSF または .EXE ファイルを探します。.DSF ファイルは .EXE ファイルよりも優先されます。.DSF または .EXE ファイルの名前は,イメージ名と一致していなければなりません。
/IMAGE_PATH=directory-spec 修飾子を含めなかった場合,デバッガは最初にダンプ・ファイルを含んでいるディレクトリの中で DST ファイルを探します。これに失敗すると,デバッガはまずディレクトリ SYS$SHARE を,次にディレクトリ SYS$MESSAGE を探します。デバッガがイメージの DST ファイルを発見できなかった場合,デバッガが使用できるシンボリック情報はグローバルおよびユニバーサル・シンボル名に限定されます。
デバッガは,ダンプ・ファイル・イメージと DST ファイルの間でリンクの日付と時刻が一致しているかどうかをチェックし,一致していなければ警告を発します。
パラメータ dumpfile は,解析するプロセス・ダンプ・ファイルの名前です。プロセス・ダンプ・ファイルのタイプは .DMP でなければならず,DST ファイルのタイプは .DSF または .EXE でなければなりません。
SCD の詳しい使い方については,『OpenVMS Alpha System Analysis Tools Manual』を参照してください。
関連コマンド
ANALYZE/CRASH_DUMP
CONNECT %NODE
SDA
#1 |
---|
DBG> ANALYZE/PROCESS/IMAGE_DUMP=my_disk$:[my_dir] my_disk$:[my_dir]wecrash.dmp %SYSTEM-F-IMGDMP, dynamic image dump signal at PC=001C0FA0B280099C, PS=001C003C break on unhandled exception preceding WECRASH\th_run\%LINE 26412 in THREAD 8 26412: if(verify){ DBG> SET RADIX HEXEXADECIMAL; EXAMINE PC WECRASH\th_run\%PC: 0000000000030244 DBG> |
端末の制御を現在のプロセスから他のプロセスに渡します。
注意
このコマンドは,デバッガへの Compaq DECwindows Motif for OpenVMS ユーザ・インタフェースでは使用できません。
ATTACH process-name
process-name
端末の接続先になるプロセスを指定します。指定するプロセスは,それに接続しようとする前に存在しているものでなければなりません。プロセス名に英数字以外の文字またはスペース文字が含まれている場合,その文字を二重引用符(")で囲む必要があります。
ATTACH コマンドを使用すれば,デバッグ・セッションとコマンド・インタプリタの間または 2 つのデバッグ・セッションの間を行ったり来たりすることができます。このためには,まず SPAWN コマンドを使用してサブプロセスを作成しなければなりません。そのあとはいつでも望むときにそのサブプロセスに接続できます。システムのオーバヘッドを最小にして元のプロセスに戻るには,もう一度 ATTACH コマンドを使用します。関連コマンド
SPAWN
#1 |
---|
DBG> SPAWN $ ATTACH JONES %DEBUG-I-RETURNED, control returned to process JONES DBG> ATTACH JONES_1 $ |
この例では,一連のコマンドによりデバッガ(現在 JONES というプロセスで実行中)から JONES_1という名前のサブプロセスが作成され,作成されたサブプロセスに接続します。
#2 |
---|
DBG> ATTACH "Alpha One" $ |
この例は,スペース文字を含むプロセス名を二重引用符で囲む方法を示しています。
プログラムにリンクされたルーチンを呼び出します。
CALL routine-name [(argument[,...])]
routine-name
呼び出し先のルーチンの名前またはメモリ・アドレスを指定します。argument
呼び出し先ルーチンが必要とする引数を指定します。引数は次に示すように,アドレス,ディスクリプタ,参照,値で渡すことができます。
/AST(省略時の設定)
/NOAST
呼び出し先ルーチンの実行時に非同期システム・トラップ(AST)の実行要求を許可するか禁止するかを制御します。/AST 修飾子を指定すると,呼び出し先ルーチンでの AST の実行要求は許可されます。/NOAST 修飾子を指定すると,呼び出し先ルーチンでの AST の実行要求は禁止されます。CALL コマンドで /AST と /NOAST のどちらも指定しないと,DISABLE AST コマンドを以前に入力していた場合を除き,AST の実行要求は許可されます。/SAVE_VECTOR_STATE
/NOSAVE_VECTOR_STATE(省略時の設定)
VAX のベクタ化されたプログラムに適用されます。ベクタ型プロセッサの現在の状態を保存したあと,CALL コマンドでルーチンを呼び出したときにその状態を復元するのかどうかを制御します。ベクタ型プロセッサの状態は次の情報で構成されます。
- ベクタ・レジスタ(V0 から V15)とベクタ制御レジスタ(VCR,VLR,VMR)の値
- 実行要求を保留にしている可能性のあるベクタ例外(ベクタ命令の実行により引き起こされる例外)
ルーチンを実行するために CALL コマンドを使用すると,ルーチンの実行によって次のようにベクタ型プロセッサの状態が変わる可能性があります。
- ベクタ・レジスタまたはベクタ制御レジスタの値を変更する
- ベクタ例外を引き起こす
- CALL コマンドの実行時に保留中になっていたベクタ例外の実行要求を引き起こす
/SAVE_VECTOR_STATE 修飾子は呼び出し先ルーチンの実行が終了したあと,CALL コマンドの実行前に存在していたベクタ型プロセッサの状態を復元することをデバッガが指定します。これにより,呼び出し先ルーチンの実行が終了した後,次のことが保証されます。
- CALL コマンドの実行前に実行要求を保留していたベクタ例外はすべて実行要求を保留した状態のままになります。
- ルーチン呼び出し時に発生したベクタ例外は実行要求を保留した状態のままになりません。
- ベクタ・レジスタの値は CALL コマンドの実行前の値と同じになります。
/NOSAVE_VECTOR_STATE 修飾子(これが省略時の設定)は,CALL コマンドの実行前に存在していたベクタ型プロセッサの状態を,呼び出し先ルーチンの実行が終了したあと,復元しないことをデバッガが指定します。この場合,ルーチンの呼び出し後のベクタ型プロセッサの状態は,呼び出し先ルーチンによる作用があればそれによって決まります。
/[NO]SAVE_VECTOR_STATE 修飾子は汎用レジスタにはまったく影響しません。汎用レジスタの値は,CALL コマンドでルーチンが実行されると必ず保存され,復元されます。
CALL コマンドはプログラムを実行するために使用できる 4 つのデバッガ・コマンドのうちの 1 つです(他の 3 つは GO,STEP,EXIT)。CALL コマンドを使用すれば,プログラムの通常の実行とは別にルーチンを実行できます。CALL コマンドは,ルーチンがプログラムにリンクされていたものであるかぎり,プログラムに実際にそのルーチンへの呼び出しがあるかないかにかかわらずそのルーチンを実行します。CALL コマンドを入力すると,デバッガは次の処理を行います。詳しい説明は,修飾子の説明を参照してください。
- 汎用レジスタの現在の値を保存します。
- 引数リストを構成します。
- コマンドで指定されたルーチンへの呼び出しを実行し,引数を引き渡します。
- ルーチンを実行します。
- R0 レジスタ内のルーチンにより返される値を表示します。便宜上,呼び出し先ルーチンの実行後,R0 レジスタには関数戻り値(ルーチンが関数の場合)またはプロシージャ完了ステータス(ルーチンが状態値を返すプロシージャの場合)が入ります。呼び出し先プロシージャが状態値も関数値も返さない場合には,R0 の値は意味がないことになり,"value returned" メッセージは無視してかまいません。
- 汎用レジスタの値を CALL コマンドの実行前の値に復元します。
- プロンプトを表示します。
デバッガは呼び出し先ルーチンがプロシージャ呼び出し標準(『OpenVMS Calling Standard』を参照)に従っているものとみなします。ただし,デバッガはサポートされているあらゆる言語に対する引数の受け渡し方法全部についての知識を持っているわけではありません。したがって,パラメータの受け渡し方法,たとえば,CALL SUB1(X)ではなくCALL SUB1(%VAL X)を使用するなどを指定する必要があるかもしれません。ルーチンへ引数を引き渡す方法についての詳しい説明は,各言語のマニュアルを参照してくさい。
現在の言語が C または C++ の場合には,省略時の設定により,CALL コマンドは参照によってではなく,値によって引数を渡します。さらに,受け渡しメカニズム・レキシカル(%REF や %VAL など)を使用せずに,次の引数を渡すことができます。
- ルーチンの参照
- 引用符で囲まれた文字列(%REF 文字列として取り扱われる)
- 構造体,レコード,オブジェクト
- F 浮動小数点,D 浮動小数点,G 浮動小数点,S 浮動小数点パラメータと,その型の変数を逆参照することによる T 浮動小数点形式
ルーチンに読み込み専用 ではない パラメータが含まれている場合,パラメータに割り当てられている値は可視状態ではなく,値へのアクセスは確実ではありません。これは,デバッガが,プログラム引き数ではなく内部引数リストのパラメータ値を調整するためです。値の変化を調べるには,パラメータの代わりに静的変数を使用してみてください。
浮動小数点パラメータは,F 浮動形式の値で渡すことができます。CALL コマンドは,浮動小数点値がF 浮動形式で渡されるとみなします。浮動少数点値の引き渡しは,F 浮動以外の形式ではサポートされていないため,予測できない結果になります(後述の例を参照)。
SET BREAK/EXCEPTION コマンドまたは STEP/EXCEPTION コマンドにより発生する例外ブレークポイントでの一般的なデバッグ方法は,CALL コマンドでダンプ・ルーチンを呼び出すことです。例外ブレークポイントで CALL コマンドを入力すると,呼び出し先ルーチンの中で以前に設定されていたブレークポイント,トレースポイントまたはウォッチポイントは,デバッガが例外コンテキストを失わないようにするために一時的に無効になります。ただし,例外ブレークポイント以外の位置で CALL コマンドを入力した場合には,このようなイベントポイントはアクティブになります。
例外ブレークポイントが検出されると,アプリケーションで宣言された条件ハンドラが起動される前に例外が中断されます。例外ブレークポイントでは,CALL コマンドでルーチンを実行したあとに GO コマンドまたは STEP コマンドを入力すると,デバッガが例外を再度シグナル通知します(GO コマンドと STEP コマンドを参照)。
Alpha プロセッサでは,CALL コマンドで起動されたルーチンの 前に 起動されたルーチンはデバッグできません。たとえば,プログラムを MAIN ルーチンで終了し,ブレークポイントを SORT ルーチンに設定するとします。そこでデバッガ・コマンドの CALL SORT を実行します。SORT ルーチンのデバッグ中は,MAIN ルーチンはデバッグできません。まず SORT ルーチンへの呼び出しから戻らなければなりません。
マルチプロセス・プログラムをデバッグするためにマルチプロセス・デバッグ構成を使用している場合(論理名 DBG$PROCESS の値が MULTIPROCESS の場合)には,CALL コマンドは可視プロセスのコンテキストで実行されますが,(SET PROCESS/HOLD コマンドによって)保留されていない他のプロセスのイメージも実行できます。CALL コマンドを 1 つまたは複数のプロセスにブロードキャストするために DO コマンドを使用すると,CALL コマンドは保留されていない指定された各プロセスのコンテキストで実行されますが,保留されていない他のプロセスのイメージも実行できます。どの場合も,可視プロセスの保留状態は無視されます。
マルチプロセス・プログラムをデバッグするためにマルチプロセス・デバッグ構成を使用している場合,実行がプロセスの中でどのように継続されるかは SET MODE [NO]INTERRUPT コマンドの入力の有無によって決まります。省略時の設定(SET MODE INTERRUPT)では,実行はプロセスのどれかで中断されるまで続きます。中断された時点で,イメージを実行していた他のプロセスで実行に割り込みがかかり,デバッガは入力を要求します。
関連コマンド
GO
EXIT
SET PROCESS
SET MODE [NO]INTERRUPT
SET VECTOR_MODE [NO]SYNCHRONIZED(VAX のみ)
STEP
SYNCHRONIZE VECTOR_MODE(VAX のみ)
前へ | 次へ | 目次 | 索引 |