日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

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


目次 索引



変数の現在値を表示するには,次の手順に従います。

  1. 第 10.5.1 項 の説明に従って,ウィンドウ内の変数名を検索し,選択する。

  2. プッシュ・ボタン・ビューの 「EX」ボタンをクリックする。コマンド・ビューに変数とその現在値が表示される。この値は現在の有効範囲内の変数の値であり,ユーザが変数を選択したソース記憶位置の値ではない。

図 10-8図 10-9 ,および 図 10-10 に整変数,配列集合体,および配列要素の表示方法をそれぞれ示します。

図 10-8 整変数の値の表示


図 10-9 配列集合体の値の表示


図 10-10 配列集合体の値の表示


現在値を別の型や基数で表示するには,次の手順に従ってください。

  1. 第 10.5.1 項 の説明に従って,ウィンドウ内で変数名を検索して選択する。

  2. メイン・ウィンドウの「Command」メニューで「Examine...」を選択する。「Examine」ダイアログ・ボックスが表示され,選択されている変数名が
    「Variable/Expression」フィールドに表示される。

  3. ダイアログ・ボックス内の「Typecast」メニューで「default」,「int」,「long」,「quad」,「short」,または「char*」のいずれかを選択する。

  4. ダイアログ・ボックス内の「Output Radix」メニューで「default」,「hex」,「octal」,「decimal」,または「binary」のいずれかを選択する。

  5. 「OK」をクリックする。

指定に応じて変更された値がコマンド・ビューに表示されます。

図 10-11 では,変数jがlongに型キャストされています。

図 10-11 変数値の型キャスト




変数の現在値を変更するには,次の手順に従ってください。

  • 第 10.5.1 項 の説明に従って,ウィンドウ内で変数名を検索して選択する。

  • メイン・ウィンドウの「Command」メニューで「Deposit...」を選択する。「Deposit」ダイアログ・ボックスが表示され,選択されている変数名が「Variable」フィールドに表示される。

  • 「Value」フィールドに新しい値を入力する。

  • ダイアログ・ボックス内の「Input Radix」メニューで「default」,「hex」,「octal」,「decimal」,「binary」のいずれかを選択する。

  • 「OK」をクリックする。

指定に応じた新しい値がコマンド・ビューに表示され,変数に代入されます。

図 10-12 では,変数safeの値を変更しています。

図 10-12 変数値の変更




変数をモニタする場合,デバッガはその値をモニタ・ビューに表示します。また,たとえば,ステップのあとやブレークポイントでプログラムからデバッガに制御が戻ると,表示されている値をチェックし,更新します。

  注意
モニタできるのは,変数と,配列や構造体 (レコード) などの集合体だけです。複合式やメモリ・アドレスはモニタできません。

変数をモニタするには,次の手順に従ってください ( 図 10-13 を参照)。

  1. 第 10.5.1 項 の説明に従って,ウィンドウ内で変数名を検索し,選択する。

  2. プッシュ・ボタン・ビューの「MON」ボタンをクリックする。デバッガは次の表示を行う。

    • モニタ・ビューを表示する ( まだ表示されていない場合 )。

    • 選択された変数の名前とその修飾パス名を「Monitor Expression」欄に表示する。

    • その変数の値を「Value/Deposit」欄に表示する。

    • 塗りつぶされていないボタンを「Watched」欄に表示する ( 第 10.5.5 項 を参照 )。

変数をモニタしているときに出力値を型キャストするには,「Monitor」メニューで「Typecast」を選択します。

モニタ中の変数の出力の基数は次の方法で変更できます。

  • モニタ中の選択された要素の出力の基数を変更するには,「Monitor」メニューで「Change Radix」を選択する。

  • これ以降モニタするすべての要素の出力の基数を変更するには,「Monitor」メニューで「Change All Radix」を選択する。

モニタしている要素をモニタ・ビューから削除するには,「Monitor」メニューで「Remove」を選択します。

図 10-13 変数のモニタ




配列や構造体 (レコード) などの集合体変数の名前を選択し,「MON」ボタンをクリックすると,モニタ・ビューの「Value/Deposit」欄に Aggregate という語が表示されます。集合体変数のすべての要素 (構成要素) の値を表示するには,「Monitor Expression」欄の変数名をダブル・クリックするか,または「Monitor」メニューで「Expand」を選択します。各要素の名前は,親の名前よりインデントされて表示されます ( 図 10-14 を参照)。ある要素が集合体の場合,その名前をダブル・クリックすればさらにその要素も表示されます。

図 10-14 モニタ・ビューに展開された集合体変数 (配列)


拡大された表示を元に戻して,集合体の親の名前だけをモニタ・ビューに表示するには,「Monitor Expression」欄の変数名をダブル・クリックするか,または「Monit or」メニューで「Collaspe」を選択します。

集合体変数の構成要素を選択した場合,その構成要素式自身が変数であれば,選択時にアクティブだった構成要素がモニタされます。たとえば,配列構成要素 arr[i] を選択した場合, i の現在値が 9 であれば,たとえ i の値があとで 10 に変わっても,arr[9] がモニタされます。

ポインタ (アクセス) 変数の名前を選択し「MON」ボタンをクリックすると,参照されたオブジェクトのアドレスがモニタ・ビューの「Value/Deposit」欄に表示されます ( 図 10-15 の最初のエントリを参照)。

参照されたオブジェクト値をモニタする (ポインタ変数を間接参照する) には,「Monitor Expression」欄のポインタ名をダブル・クリックします。この結果,モニタ・ビューではそのポインタ変数のエントリの下に,参照されたオブジェクトエントリがインデントされて表示されます ( 図 10-15 の一番下のエントリを参照)。参照されたオブジェクトが集合体の場合,その名前をダブル・クリックすればさらにその要素も表示されます。

図 10-15 モニタ・ビューでのポインタ変数と参照されたオブジェクト




ウォッチされている変数の値がプログラムで変更されると,実行が中断しコマンド・ビューにその新旧の値が表示されます。

変数をウォッチする ( 変数へのウォッチポイントの設定 ) には,次の手順に従ってください。

  • 第 10.5.4 項 の説明に従って変数をモニタする。変数をモニタするたびに,モニタ・ビューの「Watched」欄にボタンが 1 つ表示される ( 図 10-16 を参照 )。

  • 「Watched」欄のボタンをクリックする。ボタンが塗りつぶされて,ウォッチポイントの設定が示される。

図 10-16 モニタ・ビューでの変数のウォッチ


ウォッチポイントを無効にするには,モニタ・ビューの「Watched」ボタンをクリックしてクリアするか,または「Monitor」メニューで「Toggle Watchpoint」を選択します。ウォッチポイントを有効にするには,目的の「Watched」ボタンをクリックして塗りつぶすか,または「Monitor」メニューで「Toggle Watchpoint」を選択します。

静的変数と非静的 ( 自動 ) 変数,およびこれらの変数へのアクセス方法については, 第 10.6.1 項 を参照してください。変数の定義元ルーチンから実行の制御が移る ( 戻る ) と,非静的ウォッチポイントは無効になります。非静的変数がアクティブでなくなると,モニタ・ビューではそのエントリが薄く表示され,その「Watched」ボタンはクリアされます。

変数の定義元ルーチンに実行の制御が後で戻る場合,非静的ウォッチポイントが自動的に再び有効になることはありません。非静的ウォッチポイントは,ユーザが自分で明示的に,有効にしなければなりません。

10.5.6 モニタされたスカラ型変数の値の変更

スカラ ( 非集合体 ) 型変数,たとえば整数型や論理型の値を変更するには,次の手順に従ってください ( 図 10-17 を参照)。

  1. 第 10.5.4 項 の説明に従って変数をモニタする。

  2. モニタ・ビューの「Value/Deposit」欄の変数値をクリックする。その値の上に小さな編集可能ダイアログ・ボックスが表示される。

  3. そのダイアログ・ボックスに新しい値を入力する。

  4. そのダイアログ・ボックスのチェック・マーク (OK) をクリックする。ダイアログ・ボックスが消えて新しい値が表示され,変数がその値になったことが示される。その変数の型,範囲などに合わない値を入力しようとすると注意が表示される。

図 10-17 モニタされたスカラ型変数の値の変更


値の入力を中止してダイアログ・ボックスを消すには,X ( 取り消し )をクリックします。

集合体型変数 (たとえば配列や構造体) は一度に 1 つの構成要素の値を変更できます。集合体型変数の構成要素の値を変更するには,次の手順に従ってください( 図 10-18 を参照)。

  1. 第 10.5.4.1 項 の説明に従って構成要素の値を表示する。

  2. スカラ型変数の値の変更手順に従う。

図 10-18 集合体型変数の構成要素の値の変更




この節では,デバッグ時にプログラム変数にアクセスするときの一般的な関連事項について説明します。

コンパイル時にプログラムを最適化すると,デバッグ時に特定の変数にアクセスできなくなります。デバッグ対象のプログラムをコンパイルするときは,できるだけ最適化しないようにしてください ( 第 1.2 節 を参照)。

変数の値をチェックする前に,その変数が宣言され初期化される箇所の先まで必ずそのプログラムを実行します。初期化されていない変数内の値は,不当であると考えられます。

10.6.1 静的変数と非静的 (自動) 変数へのアクセス

  注意
ここでは総称して「非静的変数」という用語を使用しますが,言語によっては自動変数と呼ぶ場合もあります。

静的変数には,プログラムの実行中は同じメモリ・アドレスが割り当てられます。静的変数にはいつでもアクセスできます。

非静的変数はスタックかレジスタに割り当てられ,その定義元ルーチンかブロックが呼び出しスタック上でアクティブな場合にだけ値を持ちます。したがって,非静的変数にアクセスできるのは,その定義元ルーチンかブロック ( 定義元ルーチンから呼び出されたルーチンを含む ) の有効範囲内でプログラムの実行が一時停止しているときだけです。

通常,非静的変数にアクセスするには,定義元にまずブレークポイントを設定してから,そのブレークポイントまでプログラムを実行します。

ユーザ・プログラムの実行によって非静的変数がアクセスできなくなると,次のような通知がなされます。

  • 変数の値を表示または変数をモニタしようとしている場合は,それぞれ 第 10.5.2 項第 10.5.4 項 の説明のように,その変数がアクティブでないまたは有効範囲にないというメッセージが発行される。

  • 変数 ( または変数を含む式 ) をモニタしている場合は,モニタ・ビュー内のそのエントリが薄く表示される。エントリが薄く表示されていると,その変数の表示値はチェックも更新もされない。また, 第 10.5.3 項 のように,その値を変更することもできない。そのエントリは,その変数が再びアクセス可能になれば普通に表示される。

  • 変数をウォッチしている場合は ( 第 10.5.5 項 を参照 ),そのウォッチポイントは無効になり ( そのウォッチ・ボタンはクリアされる ),そのエントリは薄く表示される。ただし,その変数が再びアクセス可能になっても,そのウォッチポイントは自動的には再度有効にならないことに注意。



10.6.2 呼び出しスタックを基準とする現在の有効範囲の設定

プログラム内のルーチンをデバッグしているときに,現在の有効範囲を呼び出し元ルーチン ( スタックで,現在実行が一時停止しているルーチンより下にあるルーチン ) に設定することができます。これにより,次のことが可能になります。

  • 現在のルーチン呼び出しの開始位置を明らかにする。

  • 呼び出し元ルーチンで宣言されている変数の値を明らかにする。

  • 再帰呼び出しされるルーチンの特定の起動時に変数の値を明らかにする。

  • ルーチン呼び出しの場合の変数の値を変更する。

メイン・ウィンドウの「Call Stack」メニューには,スタックで現在アクティブなプログラム・ルーチン(および,特定の条件下でのイメージとモジュール)の名前が,画面に表示できる最大行数まで一覧表示されます ( 図 10-19 を参照)。メニューの左側の番号は,実行が一時停止しているルーチンをレベル 0 としたときのスタックの各ルーチンのレベルです。

現在の有効範囲をスタックの特定のルーチンに設定するには,「Call Stack」メニュー ( 図 10-19 を参照)。からその名前を選択します。すると,次の処理が行われます。

  • 「Call Stack」メニューには,現在の有効範囲であるルーチンの名前と相対レベルが表示される。

  • メイン・ウィンドウには,そのルーチンのソース・コードが表示される。

  • 命令ビューには,そのルーチンのデコード済み命令が表示される。

  • レジスタ・ビューには,そのルーチン呼び出しに対応したレジスタ値が表示される。

  • 有効範囲を呼び出し元ルーチン (0 以外の呼び出しスタック・レベル ) に設定すると,現在位置ポインタは 図 10-19 のように白抜きになる。

  • シンボル検索の有効範囲は選択されたルーチンに設定されるので,その有効範囲内で変数を検査することなどができる。

図 10-19 現在の有効範囲を呼び出し元ルーチンに設定する


有効範囲をある呼び出し元ルーチンに設定すると,その呼び出し元ルーチンに実行制御が戻ったときに実行されるソース行が,白抜きの現在位置ポインタによって示されます。ソース言語やコーディング方法により,呼び出し文を含んでいる行が示されたり,それ以降の行が示されることもあります。

10.6.3 変数やその他のシンボルの検索方法

シンボルがあいまいになるのは,シンボル ( たとえば,変数名 X)を 2 つ以上のルーチンに定義するとき,つまりその他のプログラム・ユニットに定義するときです。

ほとんどの場合,シンボルのあいまいさは自動的に解消されます。まず,現在設定されている言語の有効範囲と可視性の規則が使用されます。また,デバッガではブレークポイントを設定するためなどに任意のモジュール内にシンボルを指定できるので,呼び出しスタック上のルーチン呼び出しの順序によってシンボルのあいまいさが解消されます。

しかし,複数回定義されたシンボルを指定すると,次のような処置がとられることがあります。

  • ユーザの意図するシンボルの特定の宣言をデバッガが決められず, "symbol not unique"メッセージが発行される。

  • 現在の有効範囲内で可視のシンボル宣言があれば,ユーザの意図するものでなくてもそれが参照される。

これらの問題を解決するためには,目的のシンボル宣言の検索範囲を指定しなければなりません。

  • 呼び出しスタック内で現在アクティブな複数のルーチン内にシンボルのさまざまな宣言がある場合は,メイン・ウィンドウの「Call Stack」メニューを使用して現在の有効範囲を再設定する ( 第 10.6.2 項 を参照 )。

  • それ以外の場合は,シンボルの前にパス名を指定して,適切なコマンド (EXAMINEやMONITOR など ) をコマンド・プロンプトで入力する。たとえば,変数 X を COUNTER と SWAP という2つのモジュールに定義している場合,次のコマンドを使用すればパス名 SWAP\X によって SWAP モジュール内の X の宣言を指定できる。

    DBG> EXAMINE SWAP\X
    


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.