日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
メモリ内の記憶位置にブレークポイントまたはトレースポイントを設定するには,現在設定されている基数による数値アドレスを指定します。ほとんどの言語では,データの入力時と表示用の省略時の基数は,10 進数です。
Alpha プロセッサでは,例外は,BLISS,MACRO-32,MACRO-64 です。これらの省略時の基数は,16 進数です。
Integrity では,例外は,BLISS,MACRO--32,Intel Assembler です。
たとえば,次のコマンドは,10 進数で 2753 のアドレスまたは 16 進数で 2753 のアドレスに,ブレークポイントを設定します。
DBG> SET BREAK 2753 |
組み込みシンボル %BIN,%OCT,%DEC,%HEX のいずれかを使用すると,ユーザは 2753 などの個々の整数リテラルの入力時に基数を指定できます。たとえば次のコマンド行では,2753 が 16 進数の整数として処理されなければならないことをシンボル %HEX が指定しています。
DBG> SET BREAK %HEX 2753 |
数字ではなく文字で始まる 16 進数を指定するときには,最初に 0 を付ける必要があることに注意してください。そうしないと,デバッガは,指定された要素をプログラム内のシンボルと解釈しようとします。
基数の指定および組み込みシンボル %BIN,%DEC,%HEX,%OCT についての詳しい説明は, 第 4.1.10 項 と 付録 B を参照してください。
ブレークポイントまたはトレースポイントがプログラム内のシンボルに対応する数値アドレスに設定されている場合は,SHOW BREAK コマンドまたは SHOW TRACE コマンドによって,ブレークポイントをシンボリックに示すことができます。
3.3.1.3 メモリ・アドレスの取得とシンボル化
行番号,ルーチン名,ラベルなどのシンボリック・アドレス式に対応するメモリ・アドレスを決定するには EVALUATE/ADDRESS コマンドを使用します。次に例を示します。
DBG> EVALUATE/ADDRESS SWAP 1536 DBG> EVALUATE/ADDRESS %LINE 26 1629 DBG> |
アドレスは,現在の基数で表示されます。基数修飾子を指定して,別の基数でアドレスを表示することもできます。次に例を示します。
DBG> EVALUATE/ADDRESS/HEX %LINE 26 0000065D DBG> |
SYMBOLIZE コマンドは,EVALUATE/ADDRESS と逆の動作をします。つまり,対応するシンボルが存在する場合に,メモリ・アドレスをパス名を含むシンボル表現に変換します。 第 5 章 でシンボル化の制御方法について説明します。アドレスの取得とシンボル化についての詳しい説明は,
第 4.1.11 項 を参照してください。
次の SET BREAK または SET TRACE コマンド修飾子を使用すれば,特定のクラス内のすべてのソース行またはすべての命令でブレークまたはトレースするように設定できます。
これらの修飾子を使用する場合,アドレス式を指定してはなりません。
たとえば,次のコマンドは実行中に検出されたすべてのソース行の先頭でブレークするように設定します。
3.3.2 行または命令へのブレークポイントまたはトレースポイントの設定
/LINE
/BRANCH
/CALL
/INSTRUCTION
DBG> SET BREAK/LINE |
命令関連の修飾子は,特に命令コードのトレースに有効です。すなわち,すべての命令をトレースする場合や特定のクラスの命令をトレースする場合に有効です。次のコマンドは,検出されたすべての分岐命令 ( たとえば,BEQL,BGTR など ) をトレースするように設定します。
DBG> SET TRACE/BRANCH |
命令コード・トレースは,プログラムの実行速度を低下させることに注意してください。
省略時の設定では,ここで説明した修飾子を使用した場合,デバッガは現在実行しているルーチン内だけでなく,すべての呼び出されたルーチン内でもブレークまたはトレースします。これは,SET BREAK/INTO または SET TRACE/INTO を指定した場合と同じです。 SET BREAK/OVER または SET TRACE/OVER を指定すれば,すべての呼び出されたルーチン内でのブレーク動作またはトレース動作を抑止できます。あるいは,/[NO]JSB,/[NO]SHARE,/[NO]SYSTEM の各修飾子を使用して,ブレーク ( トレース ) 動作を抑止するルーチンの種類を指定することもできます。たとえば,次のコマンドは,呼び出されたルーチンが共用可能イメージかシステム空間内に存在する場合を除き,呼び出されたルーチン内のすべての命令でブレークするように設定します。
DBG> SET BREAK/LINE/NOSHARE/NOSYSTEM |
SET BREAK/SYSEMULATE[=mask] |
mask は省略可能な引数であり,どの命令グループがブレークポイントを起動するかを指定するためのビットがセットされたクォドワードです。現在定義されているエミュレートされた命令グループは BYTE 命令と WORD 命令だけです。この命令グループは,mask のビット 0 を 1 にセットすることにより指定します。
mask を指定しなかった場合や,
mask = FFFFFFFFFFFFFFFF の場合には,オペレーティング・システムが命令をエミュレートしたときに,デバッガはプログラムの実行を停止します。
3.3.4 ブレークポイントまたはトレースポイントでのデバッガ動作制御
SET BREAK コマンドおよび SET TRACE コマンドには,ブレークポイントおよびトレースポイントでのデバッガの動作を制御するためのオプションがいくつかあります。すなわち,/AFTER,/[NO]SILENT,/[NO]SOURCE, /TEMPORARY の各コマンド修飾子とオプションの WHEN 句と DO 句です。次に,これらのオプションの使用例をいくつか示します。
次のコマンドは,14 行目にブレークポイントを設定し,14 行目が 5 回実行されたあとに,そのブレークポイントが有効になるよう指定します。
DBG> SET BREAK/AFTER:5 %LINE 14 |
次のコマンドは,実行されるすべての行でトレースポイントが検出されるよう設定します。DO 句は,各行が実行されるたびに変数 X の値を取得します。
DBG> SET TRACE/LINE DO (EXAMINE X) |
次の例は,WHEN 句と DO 句をいっしょに取り込む方法を示したものです。このコマンドは,27 行目にブレークポイントを設定します。ブレークポイントが検出される ( 実行が停止する ) のは,SUM の値が 100 より大きいときだけです。27 行目が実行されるたびにブレークするわけではありません。DO 句は,ブレークポイントが検出されるたびに,すなわち SUM の値が 100 より大きいときは必ず,TEST_RESULT の値を調べます。実行が 27 行目に到達したときに,SUM の値が 100 以下の場合は,ブレークポイントは検出されず,DO 句も実行されません。
DBG> SET BREAK %LINE 27 WHEN (SUM > 100) DO (EXAMINE TEST_RESULT) |
式 "SUM> 100" などの言語式の評価についての説明は, 第 4.1.6 項 と 第 14.3.2.2 項 を参照してください。
/SILENT 修飾子は,ブレークまたはトレースのメッセージとソース・コードの表示を抑止します。この修飾子は,トレースポイントでのデバッガ・コマンドの実行だけに SET TRACE コマンドを使用したいときなどに有効です。次の例では,SET TRACE コマンドを使用して,トレースポイントで論理変数 STATUS の値を検査しています。
DBG> SET TRACE/SILENT %LINE 83 DO (EXAMINE STATUS) DBG> GO . . . SCREEN_IO\CLEAR\STATUS: OFF . . . |
次の例では,SET TRACE コマンドを使用して,12 行目が実行された回数をカウントしています。最初の DEFINE/VALUE コマンドは,シンボル COUNT を定義し,その値を 0 に初期化します。SET TRACE コマンドの DO 句は, COUNT を増分して,トレースポイントが検出されるたびに (12 行目に到達するたびに ) その値を評価します。
DBG> DEFINE/VALUE COUNT=0 DBG> SET TRACE/SILENT %LINE 12 DO (DEF/VAL COUNT=COUNT+1;EVAL COUNT) |
ソース行は,省略時の設定では,デバッグ中のモジュールのソース・コードが使用可能な場合に,ブレークポイント,トレースポイント,およびウォッチポイントで表示されます。ユーザは,SET BREAK,SET TRACE, SET WATCH の各コマンドの /[NO]SOURCE 修飾子および SET STEP [NO]SOURCE コマンドを使用して,ソース行の表示を制御できます。ソース・コードの表示制御の概略,特にブレークポイント,トレースポイント,およびウォッチポイントでの表示制御についての説明は, 第 6 章 を参照してください。
SET BREAK/EXCEPTION コマンドおよび SET TRACE/EXCEPTION コマンドは,プログラムによって生成された任意の例外をそれぞれブレークポイントまたはトレースポイントとして扱うようデバッガに指示します。ブレークポイントまたはトレースポイントは,アプリケーションによって定義された例外ハンドラの起動前に発生します。例外ハンドラおよび条件ハンドラに関連するデバッグ方法については,13.5 節を参照してください。
SET BREAK コマンドおよび SET TRACE コマンドには,それぞれ /EVENT=event-name 修飾子を使用できます。ユーザは,この修飾子を使用して,イベント名キーワードで示されるさまざまなイベントによって検出されるブレークポイントまたはトレースポイントを設定できます。イベントおよびそのキーワードは現在,次のイベント機能について定義されています。
適切な機能およびイベント名キーワードは,プログラムがデバッガの制御下に置かれたときに定義されます。現在のイベント機能と,対応するイベント名キーワードを示すには,SHOW EVENT_FACILITY コマンドを使用します。 SET EVENT_FACILITY コマンドを使用すれば,ユーザはイベント機能を変更でき,デバッグ・コンテキストも変更できます。これは,複数言語プログラムの使用時に,あるイベント機能に対応するルーチンをデバッグしたいが,その機能が現在設定されていない,という場合に有効です。
次の例は,SCAN イベント・ブレークポイントの設定方法を示しています。このコマンドによって,デバッガは,任意の値に対して SCAN トークンが作成されると必ずブレークするようになります。
3.3.5 例外発生時点でのブレークポイントまたはトレースポイントの設定
3.3.6 イベント発生時点でのブレークポイントまたはトレースポイントの設定
DBG> SET BREAK/EVENT=TOKEN |
ブレークポイントまたはトレースポイントが検出されると,デバッガは検出される原因となったイベントを示し,補足情報を提供します。
3.3.7 ブレークポイントまたはトレースポイントの無効化,有効化,および取り消し
いったん設定されたブレークポイントまたはトレースポイントは,無効にしたり,有効にしたり,また取り消したりすることができます。
ブレークポイントまたはトレースポイントを無効にするには, DEACTIVATE BREAK または DEACTIVATE TRACE コマンドを入力します。これで,デバッガは,プログラムの実行中にそのブレークポイントまたはトレースポイントを無視するようになります。いったん無効にしたブレークポイントまたはトレースポイントはあとで,たとえば呼び出し元のプログラムを再実行したときなど ( 第 1.3.3 項 参照) に再度有効にすることもできます。無効にされたブレークポイントまたはトレースポイントは, SHOW BREAK コマンドを実行したときに表示されるリストでは無効なもとのして表示されます。
ブレークポイントまたはトレースポイントを有効にするには, ACTIVATE BREAK または ACTIVATE TRACE コマンドを使用します。これらのコマンドを使用すれば,プログラムの実行中にブレークポイントまたはトレースポイントが有効になります。
DEACTIVATE BREAK/ALL および ACTIVATE BREAK/ALL コマンド (DEACTIVATE TRACE/ALL および ACTIVATE TRACE/ALL コマンド ) は,すべてのブレークポイントまたはトレースポイントに対して作用し,特に RERUN コマンドを使用してプログラムを再実行するときに有効です。
ブレークポイントまたはトレースポイントを取り消すには, CANCEL BREAK
または CANCEL TRACE コマンドを使用します。取り消されたブレークポイントまたはトレースポイントは, SHOW BREAK または SHOW TRACE コマンドで表示されるリストには載らなくなります。
これらのコマンドを使用する場合には,ブレークポイントまたはトレースポイントの設定時と全く同じようにして,アドレス式と ( 必要であれば ) 修飾子を指定します。次に例を示します。
DBG> DEACTIVATE TRACE/LINE DBG> CANCEL BREAK SWAP,MOD2\LOOP4,2753 |
SET WATCH コマンドを使用すれば,デバッガがプログラムの実行中にモニタするプログラム変数または任意のメモリ記憶位置を指定できます。このプロセスを,ウォッチポイントの設定といいます。ウォッチされている変数またはメモリ記憶位置の値がプログラム実行中に変更されると,ウォッチポイントが検出されます。デバッガは実行を中断し情報を表示して,コマンド入力用プロンプトを表示します。デバッガは,プログラムの実行中は常にウォッチポイントをモニタします。
この節では,SET WATCHコマンドの使用方法の概略を説明します。非静的変数,すなわち呼び出しスタック上またはレジスタ内に割り当てられる変数へのウォッチポイントの設定についての詳しい説明は, 第 3.4.3 項 を参照してください。
注意 SET WATCH コマンドを変数名または任意のシンボリック・アドレス式といっしょに使用する場合,モジュールの設定あるいは有効範囲かパス名の指定が必要になることがあります。これらの概念については, 第 5 章 で詳しく説明します。以下の例では,すべてのモジュールが設定され,すべての変数名が一意に定義されるものと想定します。 コンパイル時にプログラムの最適化を行うと,プログラム内のある変数がコンパイラによって除去されることがあります。このような変数にウォッチポイントを設定しようとすると,デバッガは警告を発行します ( 第 1.2 節 および 第 14.1 節 を参照)。 |
SET WATCH コマンドの構文は次のとおりです。
SET WATCH[/qualifier[...]] address-expression[, ...] [WHEN (conditional-expression)] [DO (command[; ...])] |
ユーザは,任意の有効なアドレス式を指定できますが,通常は変数名を指定します。次に,典型的な SET WATCH コマンドの使用例と,ウォッチポイントでのデバッガの省略時の動作の概略を示します。
DBG> SET WATCH COUNT DBG> GO . . . watch of MOD2\COUNT at MOD2\%LINE 24 24: COUNT := COUNT + 1; old value: 27 new value: 28 break at MOD2\%LINE 25 25: END; DBG> |
この例では,SET WATCH コマンドによって,変数 COUNT にウォッチポイントが設定され,GO コマンドで実行が開始されます。プログラムが変数 COUNT の値を変更すると,実行は一時停止します。その後デバッガは次の作業を実行します。
ウォッチされている変数の値を変更した命令のアドレスが,ソース行の先頭でない場合,デバッガは,行番号に行の先頭からのバイト・オフセットを追加することによって,その命令の記憶位置を示します。次に例を示します。
DBG> SET WATCH K DBG> GO . . . watch of TEST\K at TEST\%LINE 19+5 19: DO 40 K = 1, J old value: 4 new value: 5 break at TEST\%LINE 19+9 19: DO 40 K = 1, J DBG> |
この例では,変数Kを変更した命令のアドレスは,19 行目の先頭から 5 バイトの位置です。ブレークポイントは,変数値を変更した命令の次の命令にあることに注意してください。前の例のように次のソース行の先頭ではありません。
ウォッチポイントは,集合体,すなわち全配列および全レコードに設定することができます。配列またはレコードに設定されたウォッチポイントは,その配列またはレコード内の任意の要素が変更されると検出されます。したがって,個々の配列要素またはレコード構成要素にウォッチポイントを設定する必要はありません。ただし,可変長レコードには集合体ウォッチポイントを設定できません。次の例では,配列 ARR の第 3 要素が変更されたためウォッチポイントが検出されています。
DBG> SET WATCH ARR DBG> GO . . . watch of SUBR\ARR at SUBR\%LINE 12 12: ARR(3) := 28 old value: (1): 7 (2): 12 (3): 3 (4): 0 new value: (1): 7 (2): 12 (3): 28 (4): 0 break at SUBR\%LINE 13 DBG> |
ウォッチポイントは,レコードの構成要素,個々の配列要素,または配列断面 ( 配列要素の範囲 ) にも設定できます。配列断面に設定されたウォッチポイントは,その配列断面内の任意の要素が変更されたときに検出されます。ウォッチポイント設定時には,現在の言語の構文を使用します。たとえば,次のコマンドは,Pascal の構文を使用して配列 CHECK の第 7 要素にウォッチポイントを設定します。
DBG> SET WATCH CHECK[7] |
現在設定されているすべてのウォッチポイントを示すには, SHOW WATCH コマンドを使用します。
目次 | 索引 |
|