[ 前のページ ]
[ 次のページ ]
[ 目次 ]
[ 索引 ]
[ DOC Home ]
本章では次の操作方法について説明します。
本章ではウィンドウの動作とウィンドウ・メニューの選択項目について説明しますが, 一般的なデバッガ操作の大部分は,コンテキスト依存のポップアップ・ メニューから項目を選択して実行できます。コンテキスト依存のポップアップ・ メニューにアクセスするには,マウス・ポインタをウィンドウ領域に置いてMB3 をクリックします。
DECwindows Motifのコマンド・プロンプトにコマンドを入力することもできます。 デバッガ・コマンドの入力については,第8.3節を参照してください。 この章で紹介しているプログラムEIGHTQUEENS.EXE および8QUEENS.EXEのソース・コードについては, 付録 Dを参照してください。
デバッガはユーザ・プログラムのソース・コードをメイン・ウィンドウに表示します( 図 10-1を参照)。
実行が中断すると(たとえばブレークポイントで),デバッガはソース・ウィンドウを更新して, 実行の停止箇所近くのコードを表示します。ソース・ コードの左にある現在位置ポインタは,コードのどの行が次に実行されるかを示します。1 行のソース行は,言語とコーディング方法によって異なりますが,1 つまたは複数のプログラミング言語の文に相当します。
省略時の設定では,ソース・コードの左にコンパイラ生成行番号が表示されます。 この行番号により,ブレークポイント・ビュー( 第10.4.4項を参照)に表示されるブレークポイントを識別できます。 ウィンドウに少しでも多くのソース・コードを表示したいときは, 行番号を表示しないように選択することができます。 行番号を表示するか表示しないかを指定するには,メイン・ウィンドウの「File 」メニューで「Display Line Numbers」を選択します。
「Call Stack」メニューは,ソース・ビューとプッシュ・ボタン・ビューの間にありますが, ここには,表示されているソース・コードのルーチン名が表示されます。
現在位置ポインタは,図 10-1に示されるように通常塗りつぶされています。 表示コードが実行停止ルーチンのコードでない場合, 現在位置ポインタは白抜きになります(第10.1.3項と第10.6.2項を参照)。
スクロール・バーを使用して,ソース・コードを次々と表示することができます。 ただし,一度にスクロールできるのはユーザ・プログラムの1つの モジュールだけの,上下スクロールです。通常,1つのコンパイル単位が1 つのモジュールです。多くのプログラミング言語では,1つのモジュールは1 つのソース・ファイルの内容と対応しています。言語の中にはAda のように,1つのソース・ファイルの中に1つ以上のモジュールを含むものもあります。
次の各項では,プログラムの他の部分のソース・コードを表示する方法ついて説明します。 したがって,各種のモジュールにブレークポイントを設定することなどができます。 第10.1.3 項では,表示するソース・コードが見つからない場合の処置について説明します。 第10.6.2項では,呼び出しスタックで現在アクティブなルーチンのソース・ コードの表示方法について説明します。
メイン・ウィンドウでの操作が終了したら,「Call Stack」メニューをクリックして, 実行の停止箇所を表示し直すことができます。
コンパイル時にプログラムを最適化すると,表示されるソース・コードとプログラム記憶位置の実際の内容とが対応しなくなります( 第1.2節を参照)。
別ルーチンのソース・コードを表示するには,次の手順に従ってください。
第10.6.2項では,呼び出しスタック内にあり, 現在アクティブなルーチンのソース・コードを表示する別の方法を説明しています。
別モジュールのソース・コードを表示するには,次の手順に従ってください。
ソース・コードを表示できない場合には,次のような原因が考えられます。
表示するソース・コードが見つからない場合,呼び出しスタックにある次のルーチンのソース・ コードの表示が試行されます。そのようなルーチンのソース・ コードが表示される場合,現在位置ポインタは白抜きになり, 戻り先の呼び出し元ルーチンのソース行を示します。
ソース・ファイルの特性と記憶位置についての情報は,プログラムのデバッグ・ シンボル・テーブルに入っています。ソース・ファイルがコンパイル後に別のディレクトリに移動された場合, そのソース・ファイルが見つからないことがあります。 ソース・ファイルの記憶位置をデバッガに指示するには,DBG> プロンプトでSET SOURCEコマンドを入力します(第8.3節を参照)。
OpenVMSデバッガには簡単なテキスト・エディタが用意されており,ユーザ・ プログラムをデバッグ中にソース・ファイルを編集することができます( 図 10-3を参照)。
デバッガのDECwindows Motifメニュー・インタフェースで使用できるテキスト・ エディタは,簡単な機能のエディタであるため,ランゲージ・センシティブ・ エディタ(LSE)のような優れた機能を持つエディタにはおよびません。 ただし「Commands」メニューの「Edit File」項目で起動するテキスト・ エディタに,このような優れた機能を持つエディタを使用することはできません。 内蔵エディタ以外のエディタを使用する場合は,コマンド・ ビューのDBG>プロンプトでEditコマンドを入力します(本書の第3部にあるEDIT コマンドの項を参照)。
エディタを起動するには,メイン・ウィンドウの「Command」メニューで「Edit File 」を選択します。省略時の設定では,このエディタによりバッファが1 つオープンされ,ソース・ビューに現在表示されているモジュールがそのバッファに表示されます。 このバッファには,バッファのファイルに関するファイル指定の名前がつけられます。 ソース・ビューにファイルが表示されない場合,main_buffer という名前を持つ空のテキスト・ バッファが表示されます。バッファ名は,エディタ・ビューのメニュー・ バーのすぐ下にあるバッファ・メニューに表示されます。
「File」メニューで「New」(空のテキスト・バッファ)または「Open」(既存のファイル) を選択すると,テキスト・バッファをいくつでも作成することができます。 各テキスト・バッファの名前はバッファ・メニューに表示されます。 バッファ間でテキストのカット,コピー,ペーストを実行するには, 「Edit」メニューで項目を選択してから,バッファ・メニューでバッファを選択します。
前方検索,後方検索,置換の各操作を実行するには,「Find」と「Replace with 」の各フィールドに文字列を入力してから,上下の方向を表した矢印をクリックします。Return キーを繰り返し押すと,文字列が繰り返し検索されます。 「Edit」メニューで「Find/Replace Next」または「Find/Replace Previous 」を選択して検索を繰り返すこともできます。
ファイルを保存するときは,「File」メニューから「Save」または「Save As」を選択します。変更したバッファをクローズしたり,デバッガを終了したりする前に, その内容を保存していない場合は,警告メッセージが表示されます。
ソース・コードを変更して,その結果をテストするときは,次の手順で行います。
この節では次の3つの内容について説明します。
現在のデバッグ・セッションで自分のプログラムを再実行したり別のプログラムを実行したりする方法については, 第9.3 節と第9.4節を参照してください。
プログラムの実行が一時停止している箇所を明らかにするには,次の手順に従ってください。
呼び出しスタック上で現在アクティブなルーチン呼び出しの並びの一覧を表示するには, 「Call Stack」メニューをクリックします。レベル0は実行が一時停止しているルーチンを示し, レベル1は呼び出し元ルーチンを示します。
現在位置からプログラムの実行を開始したり実行を再開したりするには, プッシュ・ボタン・ビューで「Go」ボタンをクリックします(図 8-3 を参照)。
次のような状況では,デバッガの介入なしに自由にプログラムを実行するのが便利です。
プログラムを開始すると,次のいずれかが発生するまで実行が続きます。
プログラムの実行が中断すると,メイン・ウィンドウの表示が更新され, 現在位置ポインタは次に実行されるコードの行を示します。
プログラムのソース行を1行ずつ実行するには,プッシュ・ボタン・ビューで「STEP 」ボタンをクリックするか,またはコマンド・ビューでSTEPコマンドを入力します。 このデバッグ方法(ステップ実行と呼ぶ) はよく使用されます。
ソース行が1行実行されると,ソース・ビューが更新され,現在位置ポインタは次に実行される行を示します。
ソース行とステップ実行の動作については,次の点に注意してください。
コンパイル時にコードを最適化した場合,表示されるソース・コードと実際に実行しているコードとが対応しないことがあるので注意してください( 第1.2節を参照)。
ルーチン呼び出し文でプログラムの実行が一時停止したときは,「Step」ボタンをクリックすれば, 通常,呼び出されるルーチン内の命令が1ステップ実行されます( そのときのコーディング方法によって異なる)。そしてデバッガは, 呼び出されたルーチン内にはブレークポイントが設定されていないとみなし, 実行を呼び出し元ルーチン内のその次のソース行で中断します。 その結果,呼び出されるルーチン(そのうちのいくつかはシステム・ ルーチンかライブラリ・ルーチンである)を最後までトレースで実行する必要がないので, コードを迅速にステップ実行できます。このことを, 呼び出されるルーチンを1ステップとして実行するといいます。
呼び出されるルーチン内の命令をステップ実行によって1行ずつ実行するには, 次の手順に従ってください。
呼び出されたルーチン内の命令が実行され始めたら,「Step」ボタンを使用してルーチンを1 行ずつ実行します。
ルーチン呼び出し文で実行が一時停止していないときに「S/in」ボタンをクリックすると, 「Step」ボタンのクリックと同じ働きをします。
呼び出されたルーチン内で実行が中断しているときは,プッシュ・ボタン・ ビューの「S/ret」ボタンをクリックするか,DBG>プロンプトでSTEP/RETURN コマンドを入力することにより,そのルーチンの最後まで直接実行できます。
デバッガは,そのルーチンの戻り命令実行の直前で中断します。その時点で, そのルーチンの呼び出しフレームは呼び出しスタックから削除されていないので, そのルーチンにローカルな変数の値を参照することなどができます。 また次のReturn命令またはCall命令までプログラムを直接実行するときは, プッシュ・ボタンのS/callボタンを使用(またはDBG>プロンプトでSTEP/CALL コマンドを入力)します。
「S/ret」ボタンは,システム・ルーチンやライブラリ・ルーチン内の命令を誤ってステップ実行した場合に特に役立ちます( 第10.1.3項を参照)。
ブレークポイントとは,変数の値のチェックやルーチン内の命令のステップ実行などを行うために実行をやめる必要があるプログラム内の記憶位置のことです。
デバッガのDECWindows Motifインタフェースでは,次の各箇所にブレークポイントを設定できます。
この問題を回避するには,2つのワークステーションを使用してプログラムをデバッグします。 詳細については,第9.7.3.1項を参照してください。
デバッガでは次の2種類のブレークポイントを設定できます。
指定した関係式の評価が真のときにだけ検出される。
このブレークポイントが検出されると,指定したシステム固有コマンドが1 つまたは複数実行される。
条件付きブレークポイントであり同時にアクション・ブレークポイントでもあるブレークポイントを設定できます。
次の各項ではこれらのブレークポイント・オプションについて説明します。
ソース・ディスプレイのソース行のうち,その左にボタンがあるソース行には, ブレークポイントを設定できます。ボタンが表示されている行は, コンパイラが実行可能コードを生成した行(ルーチン宣言,代入文など)です。
ソース行にブレークポイントを設定するには,次の手順に従ってください。
図 10-4では,37行目の先頭にブレークポイントが設定されている。
ルーチンにブレークポイントを設定すれば,そのルーチンまで直接実行を進めてそのローカル環境を検査することができます。
ルーチンにブレークポイントを設定するには,次の手順に従ってください。
また別の方法として,ルーチン名をクリックした後,「Source Browser」ビューの「Set Breakpoint」ボタンをクリックする方法もある。 この場合も,Set Breakpointコマンドの結果が,コマンド・ ビューのコマンド行にエコーバックされる。
例外ブレークポイントを設定すると,例外がシグナル通知されたとき, ユーザ・プログラムによって宣言された例外ハンドラが実行される前に実行が中断されます。 したがって例外ハンドラが使用できる場合は, その中の命令をステップ実行することにより,制御の流れをチェックできます。
例外ブレークポイントを設定するには,メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Break」メニューから「On Exception」を選択します。 例外がシグナル通知されるたびに例外ブレークポイントが検出されます。
現在設定されているブレークポイントを次の3つの方法で知ることができます。
ブレークポイント・ビューには,各ブレークポイントのモジュール名と行番号の一覧が表示される( 第10.1 節を参照)。表示された各ブレークポイントの隣にある塗りつぶされたボタンは, そのブレークポイントが有効なことを示す。塗りつぶされていないボタンは, そのブレークポイントが無効なことを示す。
ブレークポイントを設定すると,無効化,有効化または削除を行うことができます。
無効にしたブレークポイントは,プログラムの実行中はデバッガによって無視されます。 しかし,そのブレークポイントはブレークポイント・ビューに表示されているので, あとで,たとえばプログラムの再実行時などに有効にできます( 第9.3節を参照)。次の点に注意してください。
すべてのブレークポイントを無効にするには,「Break」メニューで「Deactivate All Breaks 」を選択する。
あるブレークポイントを有効にすれば,そのブレークポイントはプログラムの実行中有効になります。
ブレークポイント・ビューの場合,ブレークポイントが現在無効であれば, 「Break」メニューの「Toggle」を選択することもできる。
あるブレークポイントを取り消すと,そのブレークポイントはブレークポイント・ ビューに表示されなくなり,あとでビューを使用して有効にできなくなります。 第10.4.1項と第10.4.2項の説明に従ってブレークポイントを再設定する必要があります。 次の点に注意してください。
条件付きブレークポイントで実行が中断されるのは,指定された式の評価が真のときだけです。 たとえば,プログラム内のある変数の値が4のときにブレークポイントが有効になるように指定することができます。 その変数の値が4 でなければ,そのブレークポイントは無視されます。
プログラムの実行中にブレークポイントが検出されると,条件式が評価されます。
次の手順により,条件付きブレークポイントが設定されます。その場合, 以前同じ場所にブレークポイントが設定されていたかどうかは関係ありません。
条件付きブレークポイントを変更するには,次の手順に従ってください。 この手順で,既存の条件付きブレークポイントの位置や割り当てた条件を変更したり, 無条件ブレークポイントを条件付きブレークポイントに変更することができます。
アクション・ブレークポイントが検出されると,実行は中断され,指定したコマンドの並びが実行されます。
アクション・ブレークポイントを設定するには,次の手順に従ってください。 以前に同じ場所にブレークポイントが設定されていたかどうかは関係ありません。
アクション・ブレークポイントを変更するには,次の手順に従ってください。 この手順で,既存のアクション・ブレークポイントの位置や割り当てた条件を変更したり, 無条件ブレークポイントをアクション・ブレークポイントに変更することができます。
この節では,次の操作方法について説明します。
変数の操作全般については,第10.6節も参照してください。
次の各項の操作では,次の方法でウィンドウから変数を選択します。例を 第10.5.2項に示します。
名前を選択するときは,ソース・プログラミング言語の構文に従います。
ウィンドウ内の文字列は次のようにして選択します。
たとえば,ソース表示に文字列arr2[m]が含まれている場合は,次のようにする。
言語依存のテキスト選択のキー順序は,第10.10.4.2項の説明に従って変更できる。
変数の現在値を表示するには,次の手順に従います。
図 10-8,図 10-9 ,および図 10-10に整変数, 配列集合体,および配列要素の表示方法をそれぞれ示します。
現在値を別の型や基数で表示するには,次の手順に従ってください。
指定に応じて変更された値がコマンド・ビューに表示されます。
図 10-11では,変数jがlongに型キャストされています。
変数の現在値を変更するには,次の手順に従ってください。
指定に応じた新しい値がコマンド・ビューに表示され,変数に代入されます。
図 10-12では,変数safeの値を変更しています。
変数をモニタする場合,デバッガはその値をモニタ・ビューに表示します。 また,たとえば,ステップのあとやブレークポイントでプログラムからデバッガに制御が戻ると, 表示されている値をチェックし,更新します。
変数をモニタするには,次の手順に従ってください(図 10-13 を参照)。
変数をモニタしているときに出力値を型キャストするには,「Monitor」メニューで「Typecast 」を選択します。
モニタ中の変数の出力の基数は次の方法で変更できます。
モニタしている要素をモニタ・ビューから削除するには,「Monitor」メニューで「Remove 」を選択します。
配列や構造体(レコード)などの集合体変数の名前を選択し,「MON」ボタンをクリックすると, モニタ・ビューの「Value/Deposit」欄に Aggregateという語が表示されます。集合体変数のすべての要素( 構成要素)の値を表示するには,「Monitor Expression」欄の変数名をダブル・ クリックするか,または「Monitor」メニューで「Expand」を選択します。 各要素の名前は,親の名前よりインデントされて表示されます( 図 10-14を参照)。 ある要素が集合体の場合, その名前をダブル・クリックすればさらにその要素も表示されます。
拡大された表示を元に戻して,集合体の親の名前だけをモニタ・ビューに表示するには, 「Monitor Expression」欄の変数名をダブル・クリックするか, または「Monit or」メニューで「Collaspe」を選択します。
集合体変数の構成要素を選択した場合,その構成要素式自身が変数であれば, 選択時にアクティブだった構成要素がモニタされます。たとえば,配列構成要素arr[i] を選択した場合,iの現在値が9であれば,たとえiの値があとで10 に変わっても,arr[9]がモニタされます。
ポインタ(アクセス)変数の名前を選択し「MON」ボタンをクリックすると, 参照されたオブジェクトのアドレスがモニタ・ビューの「Value /Deposit」欄に表示されます(図 10-15 の最初のエントリを参照)。
参照されたオブジェクト値をモニタする(ポインタ変数を間接参照する) には,「Monitor Expression」欄のポインタ名をダブル・クリックします。 この結果,モニタ・ビューではそのポインタ変数のエントリの下に, 参照されたオブジェクトエントリがインデントされて表示されます(図 10-15 の一番下のエントリを参照) 。参照されたオブジェクトが集合体の場合,その名前をダブル・クリックすればさらにその要素も表示されます。
ウォッチされている変数の値がプログラムで変更されると,実行が中断しコマンド・ ビューにその新旧の値が表示されます。
変数をウォッチする(変数へのウォッチポイントの設定)には,次の手順に従ってください。
ウォッチポイントを無効にするには,モニタ・ビューの「Watched」ボタンをクリックしてクリアするか, または「Monitor」メニューで「Toggle Watchpoin t」を選択します。ウォッチポイントを有効にするには,目的の「Watched 」ボタンをクリックして塗りつぶすか,または「Monitor」メニューで「Toggle Watchpoin t 」を選択します。
静的変数と非静的(自動)変数,およびこれらの変数へのアクセス方法については, 第10.6.1項を参照してください。 変数の定義元ルーチンから実行の制御が移る(戻る)と,非静的ウォッチポイントは無効になります。 非静的変数がアクティブでなくなると,モニタ・ ビューではそのエントリが薄く表示され,その「Watched」ボタンはクリアされます。
変数の定義元ルーチンに実行の制御が後で戻る場合,非静的ウォッチポイントが自動的に再び有効になることはありません。 非静的ウォッチポイントは, ユーザが自分で明示的に,有効にしなければなりません。
スカラ(非集合体)型変数,たとえば整数型や論理型の値を変更するには, 次の手順に従ってください(図 10-17 を参照)。
値の入力を中止してダイアログ・ボックスを消すには,X (取り消し)をクリックします。
集合体型変数(たとえば配列や構造体)は一度に1つの構成要素の値を変更できます。 集合体型変数の構成要素の値を変更するには,次の手順に従ってください( 図 10-18を参照)。
この節では,デバッグ時にプログラム変数にアクセスするときの一般的な関連事項について説明します。
コンパイル時にプログラムを最適化すると,デバッグ時に特定の変数にアクセスできなくなります。 デバッグ対象のプログラムをコンパイルするときは, できるだけ最適化しないようにしてください(を参照)。(第1.2節を参照)。
変数の値をチェックする前に,その変数が宣言され初期化される箇所の先まで必ずそのプログラムを実行します。 初期化されていない変数内の値は, 不当であると考えられます。
静的変数には,プログラムの実行中は同じメモリ・アドレスが割り当てられます。 静的変数にはいつでもアクセスできます。
非静的変数はスタックかレジスタに割り当てられ,その定義元ルーチンかブロックが呼び出しスタック上でアクティブな場合にだけ値を持ちます。 したがって,非静的変数にアクセスできるのは,その定義元ルーチンかブロック( 定義元ルーチンから呼び出されたルーチンを含む)の有効範囲内でプログラムの実行が一時停止しているときだけです。
通常,非静的変数にアクセスするには,定義元にまずブレークポイントを設定してから, そのブレークポイントまでプログラムを実行します。
ユーザ・プログラムの実行によって非静的変数がアクセスできなくなると, 次のような通知がなされます。
プログラム内のルーチンをデバッグしているときに,現在の有効範囲を呼び出し元ルーチン( スタックで,現在実行が一時停止しているルーチンより下にあるルーチン) に設定することができます。これにより,次のことが可能になります。
メイン・ウィンドウの「Call Stack」メニューには,スタックで現在アクティブなプログラム・ ルーチン(および,特定の条件下でのイメージとモジュール) の名前が,画面に表示できる最大行数まで一覧表示されます(図 10-19 を参照)。メニューの左側の番号は, 実行が一時停止しているルーチンをレベル0としたときのスタックの各ルーチンのレベルです。
現在の有効範囲をスタックの特定のルーチンに設定するには,「Call Stack」メニュー(図 10-19を参照) 。からその名前を選択します。すると,次の処理が行われます。
有効範囲をある呼び出し元ルーチンに設定すると,その呼び出し元ルーチンに実行制御が戻ったときに実行されるソース行が, 白抜きの現在位置ポインタによって示されます。 ソース言語やコーディング方法により,呼び出し文を含んでいる行が示されたり, それ以降の行が示されることもあります。
シンボルがあいまいになるのは,シンボル(たとえば,変数名X)を2つ以上のルーチンに定義するとき, つまりその他のプログラム・ユニットに定義するときです。
ほとんどの場合,シンボルのあいまいさは自動的に解消されます。まず, 現在設定されている言語の有効範囲と可視性の規則が使用されます。また, デバッガではブレークポイントを設定するためなどに任意のモジュール内にシンボルを指定できるので, 呼び出しスタック上のルーチン呼び出しの順序によってシンボルのあいまいさが解消されます。
しかし,複数回定義されたシンボルを指定すると,次のような処置がとられることがあります。
これらの問題を解決するためには,目的のシンボル宣言の検索範囲を指定しなければなりません。
DBG> EXAMINE SWAP\X
レジスタ・ビューには,すべての機械語レジスタの現在の内容が表示されます( 図 10-20を参照)。
レジスタ・ビューを表示するには,メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Options」メニューで「Views...」を選択し, 「Views」ダイアログ・ボックスが表示されたら,「Registers」をクリックします。
省略時の設定では,レジスタ・ビューには現在実行が一時停止しているルーチンに対応するレジスタ値が自動的に表示されます。 プログラムからデバッガに制御が戻ると, プログラムの実行で変更されたすべての値が強調表示されます。
呼び出しスタック内の任意のルーチンに対応するレジスタ値を表示するには, メイン・ウィンドウの「Call Stack」メニューでその名前を選択します( 第10.6.2項を参照)。
レジスタに格納されている値を変更するには,次の手順に従ってください。
レジスタ値の表示に使用する基数は,次の方法で変更できます。
命令ビューには,ユーザ・プログラムのデコード済み命令ストリーム, つまり実際に実行されているコード(図 10-21 を参照)が表示されます。命令ビューが役立つのは,コンパイラによって最適化されたプログラムのデバッグ中は, メイン・ウィンドウの情報が実行中のコードと正確に対応していない場合です( 第1.2節を参照)。
命令ビューを表示するには,メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Options」メニューで「Views...」を選択し, 「Views」ダイアログ・ボックスが表示されたら,「Instructions」をクリックします。
省略時の設定では,命令ビューには現在実行が一時停止しているルーチンのデコード済み命令ストリームが自動的に表示されます。 命令の左にある現在位置ポインタは, 次の実行命令を示します。
省略時の設定では,命令に対応するソース・コードの行番号が命令の左に表示されます。 行番号を表示するか表示しないか指定するには,命令ビューの「File 」メニューで「Display Line Numbers」を選択します。
省略時の設定では,命令の左にメモリ・アドレスが表示されます。アドレスを表示するか表示しないか指定するには, 命令ビューの「File」メニューで「Show Instruction Addresses 」を選択します。
命令ビューでの操作が終了したら,「Call Stack」メニューをクリックして, 実行の停止箇所を再表示できます。
呼び出しスタック内のルーチンの命令ストリームを表示するには,メイン・ ウィンドウの「Call Stack」メニューでそのルーチンの名前を選択します( 第10.6.2項を参照)。
タスキング・プログラムは1つのプロセス内に複数の実行スレッドを持っており, 次のプログラムを含んでいます。
デバッガで使用するタスクという用語はこのような制御の流れを示すものであり, 言語や実現方法とは関係ありません。デバッガのタスキング・ サポートは,このようなプログラムすべてに適用されます。
デバッガを使用すれば,タスクの情報を表示したり,タスクの実行,優先順位, 状態の遷移などを制御するタスク特性を変更したりできます。
次の各節ではデバッガのDECWindows Motifインタフェースのタスキング機能を要約します。 デバッガのタスキング・サポートについての詳しい説明は, 第17章を参照してください。
プログラムのタスク情報を表示するには,メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Options」メニューで「Views...」を選択し, 「Views」ダイアログ・ボックスが表示されたら,「Tasking」をクリックします。
このタスキング・ビューには,ユーザ・プログラム内に現在存在している( 終了していない)すべてのタスクの情報が表示されます。プログラムからデバッガに制御が戻ると, タスク情報が更新されます(図 10-22 を参照)。
次の各情報が表示されます。
デバッグ中にタスクの特性やタスキング環境を変更するには,「Task」メニューで次のいずれかの項目を選択します。
「Tasks」メニューの項目 | 機能 |
---|---|
Abort | 選択されたタスクを次に終了可能なときに終了するように要求する。 実際にどのように実行されるかは, 現在のイベント・ファシリティにより異なる(言語固有)。Adaのタスクの場合, 強制終了文の実行と同じである。 |
Activate | 選択されたタスクをアクティブ・タスクにする。 |
Hold | 選択されたタスクを保留にする。 |
Nohold | 選択されたタスクの保留を解除する。 |
Make Visible | 選択されたタスクを可視タスクにする。 |
All | サブメニューを使用してすべてのタスクを強制終了したり, すべてのタスクの保留を解除する。 |
デバッガは,省略時のデバッガ・リソース・ファイル(DECW$SYSTEM_ DEFAULTS:VMSDEBUG.DAT)と一緒にシステムにインストールされます。このリソース・ ファイルでは,次のようなカスタマイズ可能なパラメータで, 省略時の起動設定を定義します。
説明用のコメントを入れた,システムの省略時デバッガ・リソース・ ファイルは,例 10-1に掲載されています。 これらの表示属性のうち,最初の3つの事項については, 第10.10.1項,第10.10.2項, および第10.10.3項で説明する方法でDECWindows Motif インタフェースにより会話形式で制御できます。どの場合も, 「Options」メニューで「Save Options」を選択することにより, 変更した表示構成を保存し,これ以降のデバッグ・セッションで適用することができます。
また,第10.10.4項の説明に従って, デバッガ・リソース・ファイルを編集し保存することにより,デバッガの表示構成についてのすべての属性を変更することができます。 「Options」メニューから「Save Options」を選択するとき,またはローカル・ デバッガ・リソース・ファイルの編集と保存を行うとき,デバッガは新しいバージョンのローカル・ デバッガ・リソース・ファイルDECW$USER_DEFAULTS:VMSDEBUG.DAT を作成します。このファイルには,表示構成属性の定義が含まれています。 次にデバッガを起動するとき,もっとも新しいローカル・ リソース・ファイルで定義されている属性が使用され, それによって出力表示が構成されます。DCLコマンドのDELETE, RENAME,COPYを適切に使用することにより,デバッガの以前の表示構成に戻すことができます。
システムの省略時表示構成に戻すときは,OpenVMSデバッガの「Options」メニューから「Restore Default Options 」を選択します。
デバッガのビューの起動時構成を定義するには,次の手順に従ってください。
次にデバッガを起動すると,新しい表示構成を作成するときに最新のリソース・ ファイルが使用されるようになります。
リソース・ファイル内にあるこれらのビューの定義を編集することによって( 第10.10.4項を参照), 起動時の表示構成を定義することもできます。
デバッガの起動時,省略時の設定により,ソース・ビューと命令ビューにはソース行番号が表示されます。 デバッガの起動時に行番号を表示しないようにするには, 次の手順に従ってください。
次にデバッガを起動すると,最新のリソース・ファイルが使用されて,新しい表示構成が作成されます。
リソース・ファイル内の次のリソースを「True」か「False」に設定することによって( 第10.10.4項を参照) ,起動時に行番号を表示するかどうかの省略時設定を決めることもできます。
DebugSource.StartupShowSourceLineno: True DebugInstruction.StartupShowInstLineno: True
プッシュ・ボタン・ビューのボタンはデバッガ・コマンドと対応しています。 ユーザは次の操作ができます。
これ以降のデバッガ・セッションで使用できるようにこれらの変更を保存するには, 「Options」メニューで「Save Options」を選択します。
第10.10.3.1項, 第10.10.3.2項, および第10.10.3.3項では, DECwindows Motifインタフェースを使用して会話形式でプッシュ・ボタンをカスタマイズする方法について説明します。 プッシュ・ボタンをカスタマイズするには, リソース・ファイルを編集する方法もあります。リソース・ ファイルのボタン定義は,次のスクリプトで始まります。
DebugControl.Button
(例 10-1を参照。)
ボタンのラベルまたは対応しているコマンドを変更するには,次の手順に従ってください。
ボタンのラベルを変更するときは,「Icon」メニューが「None」に設定されていることを確認してから, 「Label」フィールドに新しいラベルを入力する。
ウィンドウで選択した名前や言語式にそのコマンドを作用させる場合は, コマンド・パラメータとして%Sを指定する。たとえば,次のコマンドでは現在選択されている言語式の現在値が表示される。
EVALUATE %s
デバッガの組み込みシンボル,またはパーセント記号(%)で始まるその他の名前にそのコマンドを作用させる場合は, 次のように2つのパーセント記号を指定する。
EXAMINE %%NEXTLOC
これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは, 「Options」メニューから「Save Options」を選択します。
プッシュ・ボタン・ビューに新しいボタンを追加し,そのボタンにデバッガ・ コマンドを割り当てるには,次の手順に従ってください。
これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは, 「Options」メニューから「Save Options」を選択します。
ボタンを削除するには,次の手順に従ってください。
これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは, 「Options」メニューから「Save Options」を選択します。
ボタンを並べ替えるには,次の手順に従ってください。
これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは, 「Options」メニューから「Save Options」を選択します。
デバッガは,省略時のデバッガ・リソース・ファイル(DECW$SYSTEM_ DEFAULTS:V MSDEBUG.DAT)と一緒にシステムにインストールされます。このリソース・ ファイルでは,デバッガの省略時表示構成を定義します。第10.10節の説明に従って表示属性を変更し, 「Options」メニューの「Save Options」コマンドで変更を保存するとき, デバッガは,ローカル・デバッガ・リソース・ファイルDECW$USER_ DEFAULTS:VMSDEBUG.DATを作成します。このファイルを編集すると,デバッガの表示構成をさらに変更することができます。
ローカル・デバッガ・リソース・ファイルがない場合,「Options」メニューの「Restore Default Options 」項目を選択することにより作成できるようになっています。 最新バージョンのローカル・デバッガ・リソース・ ファイルが1つある場合,デバッガを起動するときはいつでも,デバッガ表示構成がこのファイルで定義されているとおりに作成されます。 それ以外の場合は, システム・デバッガ・リソース・ファイルDECW$SYSTEM_ DEFAULTS:VMSDEBUG.DATの定義が使用されます。
システム・リソース・ファイルは編集することができません。デバッガ表示構成に限り, 第10.10.1 項,第10.10.2項, 第10.10.3項の手順で変更することができます。 またローカル・デバッガ・リソース・ファイルを編集してから保存しても, 表示構成を変更できるようになっています。
例 10-1は,システムの省略時デバッガ・ リソース・ファイルのコピーです。ほとんどのエントリには, ファイル内で注釈が付いているため,その意味が理解できるようになっています。 第10.10.4.1 項,第10.10.4.2 項,第10.10.4.3項, 第10.10.4.4項には, 特定のキー・ シーケンスを変更するときの注意が記載されています。キー・シーケンスの指定についての詳しい説明は, 『X Toolkit Intrinsics』マニュアルの変換テーブルの構文を参照してください。
DebugControl.ButtonList
で始まるものは,この例に完全に合致するものではありません。
この行は,ファイルに含まれているボタン定義を示しています。
ファイル内の行には,StepReturnButton
,StepCallButton,Exami neButton,
ExamineASCIZButton,ExamineASCICButton,EvalButton,MonitorBu
ttonの各ボタン名も含まれています。
! ! OpenVMS Debug32/64 Debugger Resource File ! DebugVersion: 71 ! ! GEOMETRY RESOURCES: ! ! Written when you execute "SAVE OPTIONS" from the Options Menu. ! DebugSource.x: 11 DebugSource.y: 30 DebugSource.width: 620 DebugSource.height: 700 ! DebugControl.x: 650 DebugControl.y: 30 DebugControl.width: 600 DebugControl.height: 700 ! DebugEditor.x: 650 DebugEditor.y: 30 DebugEditor.width: 600 DebugEditor.height: 700 ! DebugInstruction.x: 11 DebugInstruction.y: 769 DebugInstruction.width: 620 DebugInstruction.height: 243 ! *DebugBrowser.x: 650 *DebugBrowser.y: 30 *DebugBrowser.width: 335 *DebugBrowser.height: 300 ! ! LINE NUMBER DISPLAY RESOURCES: ! ! Create the line or address number display in views at startup? ! DebugSource.StartupShowSourceLineno: True DebugInstruction.StartupShowInstLineno: True DebugInstruction.StartupShowInstAddrno: False ! ! WINDOW PANE RESOURCES: ! ! Relative size of panes in main window. ! Main window height is derived from sum of panes. ! DebugSource*SrcView.height: 460 DebugSource*PushbuttonPanel.height: 36 DebugSource*MessageOutputPanel.height: 145 ! DebugControl.BreakpointView.height: 175 DebugControl.MonitorView.height: 150 DebugControl.TaskView.height: 130 DebugControl.RegisterView.height: 250 ! ! CUSTOM BUTTON RESOURCES: ! ! The following resources determine which buttons to put in the button panel. ! Buttons will show in the order they are listed here. ! For each button there MUST be a set of associated resources. ! EXAMPLE: ! ButtonCommand - Associates a command with the button. ! ButtonLegend - Button Label or pixmap name if pixmap flag is True. ! ButtonPixmapFlag - If True uses ButtonLegend as predefined pixmap name. ! DebugControl.ButtonList: \ GoButton, StepButton, StepInButton, ... ! DebugControl.ButtonCommand.GoButton: go DebugControl.ButtonLegend.GoButton: go_pixmap DebugControl.ButtonPixmapFlag.GoButton: True ! DebugControl.ButtonCommand.StepButton: step DebugControl.ButtonLegend.StepButton: STEP DebugControl.ButtonPixmapFlag.StepButton: False ! DebugControl.ButtonCommand.StepInButton: step/in DebugControl.ButtonLegend.StepInButton: S/in DebugControl.ButtonPixmapFlag.StepInButton: False ! DebugControl.ButtonCommand.StepReturnButton: step/return DebugControl.ButtonLegend.StepReturnButton: S/ret DebugControl.ButtonPixmapFlag.StepReturnButton: False ! DebugControl.ButtonCommand.StepCallButton: step/call DebugControl.ButtonLegend.StepCallButton: S/call DebugControl.ButtonPixmapFlag.StepCallButton: False ! DebugControl.ButtonCommand.ExamineButton: examine %s DebugControl.ButtonLegend.ExamineButton: EX DebugControl.ButtonPixmapFlag.ExamineButton: False ! DebugControl.ButtonCommand.ExamineASCIZButton: examine/asciz %s DebugControl.ButtonLegend.ExamineASCIZButton: E/az DebugControl.ButtonPixmapFlag.ExamineASCIZButton: False ! DebugControl.ButtonCommand.ExamineASCICButton: examine/ascic %s DebugControl.ButtonLegend.ExamineASCICButton: E/ac DebugControl.ButtonPixmapFlag.ExamineASCICButton: False ! DebugControl.ButtonCommand.EvalButton: evaluate %s DebugControl.ButtonLegend.EvalButton: EVAL DebugControl.ButtonPixmapFlag.EvalButton: False ! DebugControl.ButtonCommand.MonitorButton: monitor %s DebugControl.ButtonLegend.MonitorButton: MON DebugControl.ButtonPixmapFlag.MonitorButton: False ! ! THE FOLLOWING RESOURCES CAN ONLY BE CHANGED BY EDITING THIS FILE. ! ----------------------------------------------------------------- ! Be sure to trim off any trailing white-spaces. ! ! FONT RESOURCES: ! ! If a font is specified for a view, and the font is available on the ! system, it will be used for that view. ! ! For any views which do not explicitly specify a font, the font specified ! by the resource "DebugDefault.Font" will be used if it is available on the ! system. ! ! If no font resources are specified at all, the debugger will use the ! systems own default font specification. ! ! The "DebugOptions.Font" applies to all optional views. We suggest that ! you select a font with a point size no larger than 14 in the option views ! in order to preserve label alignment. ! ! Using 132 column sources? Try this narrow font: ! -dec-terminal-medium-r-narrow--14-100-100-100-c-60-iso8859-1 ! ! FORMAT: -*-FONTNAM-FACE-T-*--*-PTS-*-*-*-*-CHARSET ! DebugDefault.Font: -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1 DebugSource.Font: -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1 DebugInstruction.Font: -*-COURIER-BOLD-R-*--*-140-*-*-*-*-ISO8859-1 DebugMessage.Font: -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1 DebugOptions.Font: -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1 ! ! STARTUP RESOURCES: 3=Iconified, 0=Visible ! DebugSource.initialState: 0 DebugControl.initialState: 0 DebugEditor.initialState: 0 DebugInstruction.initialState: 0 ! ! COLOR RESOURCES: ! ! Use any of the OSF Motif Named Colors. ! ! Foreground = Text Color, Background = Window Color ! ! Try: Gainsboro, MintCream, Linen, SeaShell, MistyRose, Honeydew ! Cornsilk, Lavender ! ! To use your system default color scheme, comment out all lines ! pertaining to color. ! ! Common color scheme (unless overridden for a specific view) ! *background: Gainsboro *borderColor: Red ! ! Source View Colors ! !DebugSource*background: Gainsboro DebugSource*topShadowColor: WindowTopshadow DebugSource*bottomShadowColor: WindowBottomshadow DebugSource*src_txt.foreground: blue DebugSource*src_txt.background: white DebugSource*src_lineno_txtw.foreground: red DebugSource*cnt_msg_txt.foreground: black DebugSource*cnt_msg_txt.background: white ! ! Control View Colors ! !DebugControl*background: Gainsboro DebugControl*topShadowColor: WindowTopshadow DebugControl*bottomShadowColor: WindowBottomshadow ! ! Instruction View Colors ! !DebugInstruction*background: Gainsboro DebugInstruction*topShadowColor: WindowTopshadow DebugInstruction*bottomShadowColor: WindowBottomshadow DebugInstruction*inst_txt.foreground: blue DebugInstruction*inst_txt.background: white DebugInstruction*inst_addrno_txtw.foreground: red ! ! Editor Colors ! !DebugEditor*background: Gainsboro DebugEditor*topShadowColor: WindowTopshadow DebugEditor*bottomShadowColor: WindowBottomshadow DebugEditor*edit_textw.foreground: black DebugEditor*edit_textw.background: white ! ! REGISTER VIEW RESOURCES: ! ! Which Registers to display by default in the Register View? ! CF = Call Frame, GP = General Purpose, FP = Floating Point (Alpha Only) ! *Show_CF_Registers.set: True *Show_GP_Registers.set: False *Show_FP_Registers.set: False ! ! SHOW MESSAGE/COMMAND SEPARATOR LINES? ! *Show_Message_Separators.set: True ! ! TRACK LANGUAGE CHANGES? (parser follows module language) ! *Track_Language_Changes.set: False ! ! KEY SEQUENCE RESOURCES: ! ! Key sequence used to activate the dialog box for conditional and action ! breakpoints. ! DebugSource.ModifyBreakpointToggleSequence: Ctrl <Btn1Down>, Ctrl <Btn1Up> ! ! GENERAL KEYPAD FUNCTIONS: ! !<Key>0xFFB0=KP0, <Key>0xFF91,<Key>0xFFB0=GOLD-KP0, !<Key>0xFF94,<Key>0xFFB0=BLUE-KP0, <Key>0xFFB1=KP1, !<Key>0xFF91,<Key>0xFFB1=GOLD-KP1, <Key>0xFFAC=KP, DebugSource.*XmText.translations:#override\n\ <Key>0xFFB0: EnterCmdOnCmdLine("step/line") \n\ <Key>0xFFB1: EnterCmdOnCmdLine("examine") \n\ <Key>0xFFAC: EnterCmdOnCmdLine("go") \n\ <Key>0xFF91,<Key>0xFFB0: EnterCmdOnCmdLine("step/into") \n\ <Key>0xFF94,<Key>0xFFB0: EnterCmdOnCmdLine("step/over") \n\ <Key>0xFF91,<Key>0xFFB1: EnterCmdOnCmdLine("examine^") \n\ <Key>0xFFB5: EnterCmdOnCmdLine("show calls") \n\ <Key>0xFF91,<Key>0xFFB5: EnterCmdOnCmdLine("show calls 3") \n\ <Key>0xFF8D: activate()\n ! ! IDENTIFIER WORD SELECTION: (language-based delimiters) ! NOTE: DO NOT use any double click combinitation for the following resource ! otherwise normal text selection in the source window will not work. ! DebugSource.IdentifierSelectionSequence: Ctrl<Btn1Down> ! ! EXIT CONFIRMATION: ! DebugDisplayExitConfirmDB: True ! ! COMMAND ECHO: ! DebugEchoCommands: True ! ! TITLE FORMAT: Main window and optional view window. ! ! The following title format directives are supported: ! ! %t - The title of the debugger application. ! %p - The name of the user program being debugged. ! %f - The name of the current file displayed in the source window. ! DebugControl.TitleFormat: %t - %p: %f ! ! DRAG AND DROP MESSAGE SUPRESSION: (Dont mess with these) ! *.dragInitiatorProtocolStyle: DRAG_NONE *.dragReceiverProtocolStyle: DRAG_NONE
省略時の設定では,条件付きブレークポイントとアクション・ブレークポイントのダイアログ・ ボックスを表示するキー・シーケンスは,Ctrl/MB1 です(第10.4.5項と第10.4.6項を参照)。 別のキー・シーケンスを定義するには, リソース・ファイル内の次のリソースの現在の定義を編集します。
DebugSource.ModifyBreakpointToggleSequence: Ctrl<btn1down>(2)
省略時の設定では,メイン・ウィンドウと命令ウィンドウ内の言語依存のテキスト選択用のキー・ シーケンスは,Ctrl/MB1です(第10.5.1項を参照)。 別のキー・シーケンスを定義するには, リソース・ファイル内の次のリソースの現在の定義を編集します。 次に例を示します。
DebugSource.IdentifierSelectionSequence Ctrl<btndown>
標準DECwindows Motifの単語選択との矛盾を避けるため, Ctrl<btn1down>(2)などのダブル・クリックとの組み合わせは使用しないでください。
デバッガの各ウィンドウとビューに表示されるテキストに別のフォントを定義するには, リソース・ファイル内の次のリソースの現在の定義を編集します。 次に例を示します。
DebugDefault.Font: -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1
既にコマンドを割り当てられているキーに別のコマンドをバインドするには, リソース・ファイル内の次のリソースの現在の定義を編集します。次に例を示します。
<key>0xFFB0: EnterCmdOnCmdLine("step/line 3") \n\
現在コマンドを割り当てられていないキーにコマンドをバインドする場合は, 『X and Motif Quick Reference Guide』のKeysym Encoding の章のキー指定を参照してください。
プリント・シンビオントのように,コマンド行インタプリタ(CLI)なしで動作する, 切り離されたプロセスをデバッグするとき,デバッガにはDECWindows Motif インタフェースを使用することはできません。
CLIなしで動作する,切り離されたプロセスをデバッグするときは, デバッガに文字セル(画面モード)インタフェースを使用します( 第1.12節を参照)。
[ 前のページ ]
[ 次のページ ]
[ 目次 ]
[ 索引 ]
[ DOC Home ]