Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


6.5 文字列の検索によるソース・コードの表示

SEARCH コマンドを使用すると,指定した文字列を含んでいるソース行を表示できます。

SEARCH コマンドの構文は次のとおりです。


SEARCH[/qualifier[, ...]] [range] [string] 

範囲のパラメータには,モジュール名,行番号の範囲,またはそれらの組み合わせが指定できます。モジュール名を指定しなかった場合,デバッガは TYPE コマンドの場合と同様に現在の有効範囲を使用してソース行を見つけます(第 6.3 節 を参照)。

省略時の設定では,SEARCH コマンドは指定された範囲内でその文字列が最初に(次に)現れるソース行を表示します(SEARCH/NEXT)。SEARCH/ALL コマンドは,指定された範囲内でその文字列が現れるすべてのソース行を表示します。たとえば,次のコマンド行はモジュール SCREEN_IO 内で pro という文字列が最初に現れるソース行を表示します。


DBG> SEARCH SCREEN_IO pro

以下の例では,1 つの COBOL モジュールに入っているソース行を使用して,現在の有効範囲内で SEARCH コマンドのさまざまな側面を示しています。

次のコマンド行は,文字列 D を含んでいるすべてのソース行を行 40 〜 50 から抽出して表示します。


DBG> SEARCH/ALL 40:50 D
module COBOLTEST 
    40: 02      D2N     COMP-2 VALUE -234560000000. 
    41: 02      D       COMP-2 VALUE  222222.33. 
    42: 02      DN      COMP-2 VALUE -222222.333333. 
    47: 02      DR0     COMP-2 VALUE  0.1. 
    48: 02      DR5     COMP-2 VALUE  0.000001. 
    49: 02      DR10    COMP-2 VALUE  0.00000000001. 
    50: 02      DR15    COMP-2 VALUE  0.0000000000000001.
DBG>

特定のモジュール内で文字列の発生箇所を見つけたあと,パラメータを付けずに SEARCH コマンドを入力すれば,同じモジュール内で同じ文字列が次に現れるソース行を表示することができます。これは,パラメータを付けずに TYPE コマンドを使用して次のソース行を表示するのと似ています。次に例を示します。


DBG> SEARCH 42:50 D
module COBOLTEST 
    42: 02      DN      COMP-2 VALUE -222222.333333.
DBG> SEARCH
module COBOLTEST 
    47: 02      DR0     COMP-2 VALUE  0.1.
DBG>

省略時の設定では,デバッガは指定されたとおりの文字列を検索し,その文字列の前後のコンテキストは解釈しません。これが SEARCH/STRING の動作内容です。 ある文字列がプログラム内で識別子(たとえば,変数名)として使用されている箇所を検索し,識別子以外の箇所を除外したい場合は,/IDENTIFIER 修飾子を使用します。SEARCH/IDENTIFIER コマンドは,その文字列の両端が現在の言語で識別子の一部とはならない文字によって区切られている場合にだけその文字列を表示します。

SEARCH コマンドの省略時の修飾子は /NEXT と /STRING です。別の省略時の修飾子を設定したい場合は SET SEARCH コマンドを使用します。たとえば,次のコマンドの実行後は,SEARCH コマンドは SEARCH/IDENTIFIER のように動作します。


DBG> SET SEARCH IDENTIFIER

現在 SEARCH コマンドに有効な省略時の修飾子を表示するには,SHOW SEARCH コマンドを使用します。次に例を示します。


DBG> SHOW SEARCH
search settings: search for next occurrence, as an identifier
DBG>

6.6 ステップ実行後,およびイベントポイントでのソースの表示の制御

省略時の設定では,対応するソース行をデバッガが表示するのは,ブレークポイント,トレースポイント,ウォッチポイントの検出後,または 1 つの STEP コマンドが完了したときです。

STEP コマンドを入力した場合,デバッガはステップ実行後に実行が一時停止した位置のソース行を表示します。次に例を示します。


DBG> STEP
stepped to MAIN\%LINE 16 
    16:        RANGE := 500;
DBG>

ブレークポイントまたはトレースポイントが検出された場合,デバッガはそのブレークポイントまたはトレースポイントの位置のソース行を表示します。次に例を示します。


DBG> SET BREAK SWAP
DBG> GO
   .
   .
   .
break at MAIN\SWAP 
    47: procedure SWAP(X,Y: in out INTEGER)is
DBG>

ウォッチポイントが検出された場合,デバッガはそのウォッチポイントが検出される原因となった命令に対応するソース行を表示します。

SET STEP [NO]SOURCE コマンドを使用すると,1 ステップの実行後のソース・コードの表示,またはブレークポイント,トレースポイント,ウォッチポイントでのソース・コードの表示を制御することができます。SET STEP SOURCE(省略時の設定)はソースの表示を有効にします。SET STEP NOSOURCE はソースの表示を無効にします。次に例を示します。


DBG> SET STEP NOSOURCE
DBG> STEP
stepped to MAIN\%LINE 16
DBG> SET BREAK SWAP
DBG> GO
   .
   .
   .
break at MAIN\SWAP
DBG>

SET STEP SOURCE コマンドまたは SET STEP NOSOURCE コマンドの効力を選択的に上書きするには,STEP, SET BREAK, SET TRACE,および SET WATCH の各コマンドに /SOURCE および /NOSOURCE の修飾子を使用します。

STEP/SOURCE コマンドは SET STEP NOSOURCE コマンドの効力を上書きしますが,それはその STEP コマンドが実行される間だけです。同様に,STEP/NOSOURCE も SET STEP SOURCE の効力をその STEP コマンドが実行される間だけ上書きします。次に例を示します。


DBG> SET STEP NOSOURCE
DBG> STEP/SOURCE
stepped to MAIN\%LINE 16 
    16:        RANGE := 500;
DBG>

SET BREAK/SOURCE コマンドは SET STEP NOSOURCE コマンドの効力を上書きしますが,それはその SET BREAK コマンドによって設定されたブレークポイントに対してだけです。同様に,SET BREAK/NOSOURCE も SET STEP SOURCE の効力をその SET BREAK コマンドによって設定されたブレークポイントに対してだけ上書きします。この規則は SET TRACE と SET WATCH にも適用されます。次に例を示します。


DBG> SET STEP SOURCE
DBG> SET BREAK/NOSOURCE SWAP
DBG> GO
   .
   .
   .
break at MAIN\SWAP
DBG>

6.7 ソースの表示用のマージンの設定

SET MARGINS コマンドを使用すると,ソース行の表示を開始し終了する左端と右端のソース行文字位置(左マージンと右マージン)が指定できます。これは,たとえばコードが深くインデントされていたり,長い行が右マージンで折り返したりする場合に,ソース・コードの表示を制御するのに役立ちます。このような場合には,インデントされたスペースをソースの表示で削除するために左マージンを設定したり,行を切り捨てて折り返しを防ぐために右マージンを減らしたりできます。

たとえば,次のコマンド行は左マージンを桁25,右マージンを桁35に設定します。


DBG> SET MARGINS 20:35

このあとでソース行を表示するコマンド(たとえば,TYPE, SEARCH, STEP)を入力すると,ソース・コードの桁 20 と桁 35 の間の部分だけが表示されます。ソース行表示の現在のマージン設定を示すには,SHOW MARGINS コマンドを使用します。

SET MARGINS コマンドはソース行の表示だけにしか影響を及ぼさないので注意してください。このコマンドは,その他のデバッガ出力(たとえば EXAMINE コマンドによる出力など)の表示には影響しません。

ほとんどの場合,SET MARGINS コマンドは行(非画面)モードで役立ちます。画面モードでは,SET MARGINS コマンドは定義済みディスプレイ「SRC」などのソースの表示におけるソース行の表示には効力を持ちません。


第 7 章
画面モード

画面モードは,OpenVMS デバッガのコマンド・ライン・インタフェースの拡張機能であり,このモードでは,Compaq DECwindows Motif for OpenVMS ユーザ・インタフェースの場合と同じ方法で( 第 3 部 を参照),デバッグ・セッションに関する個別のデータ・グループを同時に表示できます。たとえば,画面の一部分にソース・コードを表示し,別の部分にレジスタの内容を表示し,さらに別の部分にデバッガからの出力を表示できます。

画面モードを起動するには,キーパッドの PF3 を押します(または SET MODE SCREEN コマンドを入力します)。コマンド・ライン・インタフェースによるデバッグに戻るには,PF1 PF3 を押します(または SET MODE NOSCREEN コマンドを入力します)。

注意

デバッガに対する DECWindows Motif インタフェースの内部から画面モードを開始することはできません。

画面モード出力は,VT52 以上のVTシリーズ端末,および VWS を使用しているワークステーションの場合に最適です。特に,ワークステーションの画面が大きいほど,多数の画面をさまざまな目的に使用するのに適しています。

本章には次の内容が含まれています。

画面モード・コマンドの多くはキーパッド・キーにバインドされています。キー定義については,付録 A を参照してください。

注意

本章では,1 つまたは複数のプロセスで実行されるプログラムに共通した情報を提供します。その他のマルチプロセス・プログラム固有の情報については,第 15 章 を参照してください。

7.1 概念と用語

ディスプレイ とはテキスト行のまとまりのことです。テキストには,ソース・ファイルに入っている行,アセンブリ言語の命令,レジスタに入っている値,ユーザからデバッガへの入力,デバッガ出力,またはプログラム入出力(I/O)などがあります。

ディスプレイは ディスプレイ・ウィンドウ を通して参照します。ウィンドウは画面の任意の長方形の領域を占有できます。ディスプレイ・ウィンドウはディスプレイそのものより小さいのが普通なので,ディスプレイ・テキストを越えてウィンドウを上下左右にスクロールさせ,ディスプレイの任意の部分を参照することができます。

図 7-1 は,3 つのディスプレイ・ウィンドウのある画面モードの例です。各ディスプレイの名前(SRC, OUT,および PROMPT)は,それぞれのウィンドウの左上隅にあります。これらはディスプレイ自体のタグとして機能するだけでなく,あとでコマンドで参照するための名前としても機能します。

図 7-1 省略時の画面モード・ディスプレイ構成


図 7-1 は,画面モードを最初に起動したときに設定される省略時のディスプレイ構成です。SRC, OUT,および PROMPT は,画面モードに入ったときに省略時の設定としてデバッガが提供する 3 つの 定義済みディスプレイ(第 7.4 節 を参照)です。追加のディスプレイを作成するのと同様にこれらのディスプレイの構成を変更することができます。

SRC,OUT,および PROMPT の各ディスプレイには次の基本的な特性があります。

概念上では,ディスプレイは ペーストボード 上の場合と同じように画面上に配置されます。あるコマンドによって参照された最新のディスプレイは,省略時の設定ではペーストボードの最上部に置かれます。したがって,ウィンドウの記憶位置によって,最後に参照したディスプレイが他のディスプレイに重なるか他のディスプレイを隠すかが決まります(ペーストボード上の場合と同じ)。

デバッガは,ディスプレイをペーストする順序である ディスプレイ・リスト を保持します。いくつかのキーパッド・キー定義は,現在ペーストボード上にあるディスプレイの間を循環するために,このディスプレイ・リストを使用します。

ディスプレイはすべて何らかの ディスプレイ対象 に所属します(第 7.2 節 を参照)。ディスプレイがどのような種類の情報(たとえば,ソース・コード,アセンブリ言語命令,各種のデバッガ出力など)を取り込んで表示できるかは,このディスプレイ対象によって決まります。またディスプレイ対象によって,ディスプレイの内容が生成される方法も決まります。

ディスプレイの内容は2つの方法で生成されます。

ディスプレイへ割り当てた属性の名前は,ディスプレイ名の右側に小文字で表示されます。たとえば 図 7-1 では,SRC は source 属性と scroll 属性を持ち(SRC は 現在のソースのディスプレイ であり 現在のスクロール・ディスプレイである),OUT は output 属性を持っています。これは 現在の出力ディスプレイ です。SRC はその独自の組み込みコマンドによって自動的に更新されますが,source 属性を持っているので,ある種の会話型コマンド(たとえば,EXAMINE/SOURCE など)の出力も受け取ることに注意してください。

この節で紹介した概念については,この章の残りの部分でさらに詳しく説明します。

7.2 ディスプレイ対象

ディスプレイはすべてディスプレイ対象を持っています。このディスプレイ対象は,そのディスプレイに含まれる情報の種類とその情報が生成される方法を決めます。またディスプレイに関連するメモリ・バッファがページングされるかどうかを決めます。

通常,ディスプレイ対象は新しいディスプレイを作成するために DISPLAY コマンドを使用するときに指定します。ディスプレイ対象を指定しなかった場合は 出力ディスプレイ が作成されます。DISPLAY コマンドは,次のキーワードと一緒に使用して,既存のディスプレイのディスプレイ対象を変更するために使用することもできます。

DO(command[,...])
INSTRUCTION
INSTRUCTION(command)
OUTPUT
REGISTER
SOURCE
SOURCE(command)

レジスタ・ディスプレイ の内容はデバッガによって自動的に生成および更新されます。その他のディスプレイの対象の内容はコマンドによって生成され,それらのディスプレイ対象は 2 つの一般的なグループに分かれます。

次のディスプレイ対象のいずれかに属するディスプレイでは,ユーザがそのディスプレイを定義したときに与えたコマンドまたはコマンド・リストに従って内容が自動的に更新されます。

DO(command[,...])
INSTRUCTION(command)
REGISTER
SOURCE(command)

指定したコマンド・リストは,そのディスプレイが除去済みとしてマークされていないかぎり,デバッガがユーザのプログラムから制御を受け取るたびに実行されます。それらのコマンドの出力がディスプレイの新しい内容になります。ディスプレイが除去済みとしてマークされている場合,デバッガはユーザがそのディスプレイを可視にする(そのディスプレイを非除去済みとしてマークする)まで,そのコマンドを実行しません。

次のディスプレイ対象のいずれかに属するディスプレイでは,ユーザが会話形式で入力したコマンドから内容が作成されます。

INSTRUCTION
OUTPUT
SOURCE

デバッガの出力をこのグループの特定のディスプレイへ出力するには,まず SELECT コマンドでそのディスプレイを選択しなければなりません。その方法については次の各項と,第 7.3 節 で説明します。特定の出力のディスプレイを選択したあとは,ユーザのコマンドからの出力がそのディスプレイの内容になります。


前へ 次へ 目次 索引