日本-日本語
日本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
デバッガ説明書


目次 索引

第 10 章
デバッガの使用方法

本章では次の操作方法について説明します。

  • ユーザ・プログラムのソース・コードの表示 ( 第 10.1 節 )

  • デバッガ制御下のユーザ・プログラムの編集 ( 第 10.2 節 )

  • デバッガの制御下でのユーザ・プログラムの実行 ( 第 10.3 節 )

  • ブレークポイントによる実行の中断 ( 第 10.4 節 )

  • プログラム変数の検査と操作 ( 第 10.5 節 )

  • プログラム変数へのアクセス ( 第 10.6 節 )

  • レジスタ値の表示と変更 ( 第 10.7 節 )

  • ユーザ・プログラムのデコード済み命令ストリームの表示 ( 第 10.8 節 )

  • タスキング・プログラムのデバッグ ( 第 10.9 節 )

  • デバッガの HP DECwindows Motif for OpenVMS ユーザ・インタフェースのカスタマイズ ( 第 10.10 節 )

本章ではウィンドウの動作とウィンドウ・メニューの選択項目について説明しますが,一般的なデバッガ操作の大部分は,コンテキスト依存のポップアップ・メニューから項目を選択して実行できます。コンテキスト依存のポップアップ・メニューにアクセスするには,マウス・ポインタをウィンドウ領域に置いて MB3 をクリックします。

HP DECwindows Motif for OpenVMS のコマンド・プロンプトにコマンドを入力することもできます。デバッガ・コマンドの入力については, 第 8.3 節 を参照してください。この章で紹介しているプログラム EIGHTQUEENS.EXE および 8QUEENS.EXE のソース・コードについては, 付録 D を参照してください。

10.1 ユーザ・プログラムのソース・コードの表示

デバッガはユーザ・プログラムのソース・コードをメイン・ウィンドウに表示します ( 図 10-1 を参照 )。

図 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.1.1 別ルーチンのソース・コードの表示

別ルーチンのソース・コードを表示するには,次の手順に従ってください。

  1. メイン・ウィンドウの「File」メニューで「Browse Source...」を選択する ( 図 10-2 を参照 )。「Source Browser」ダイアログ・ボックスに,実行可能なイメージおよびこれにリンクされたすべての共用可能イメージ ( たとえば,DEBUG と LIBRTL) の名前が表示される。このとき実行可能なイメージは強調表示される。このイメージにシンボリック情報がない場合,リンクされたイメージの名前が薄く表示される。

  2. 実行可能なイメージの名前をダブル・クリックする。そのイメージ名の下にインデントされて,そのイメージ内の各モジュールの名前が表示される。

  3. 表示したいルーチンが含まれているモジュールの名前をダブル・クリックする。そのモジュール名の下にインデントされて,そのモジュール内の各ルーチンの名前が表示される。「Display Source」ボタンが強調表示される。

  4. ソース・コードを表示したいルーチンの名前をクリックする。

  5. 「Display Source」プッシュ・ボタンをクリックする。ルーチンのソース・コードがソース・ビューに表示され,同時にソース・コードの左に空のブレークポイント・ボタンが表示される。命令ビューがオープンしている場合,この表示が更新され,そのルーチンの機械語コードが表示される。

第 10.6.2 項 では,呼び出しスタック内にあり,現在アクティブなルーチンのソース・コードを表示する別の方法を説明しています。

図 10-2 別ルーチンのソース・コードの表示




別モジュールのソース・コードを表示するには,次の手順に従ってください。

  1. メイン・ウィンドウの「File」メニューで「Browse Source...」を選択する。「Source Browser」ダイアログ・ボックスに,実行可能なイメージおよびこれにリンクされたすべての共用可能イメージ ( たとえば,DEBUG と LIBRTL) の名前が表示される。このとき実行可能なイメージは強調表示される。このイメージにシンボリック情報がない場合,共有可能なイメージの名前が薄く表示される。

  2. 実行可能なイメージの名前をダブル・クリックする。そのイメージ名の下にインデントされて,そのイメージ内の各モジュールの名前が表示される。

  3. 表示したいソース・コードを含んでいるモジュールの名前をクリックする。「Display Source」ボタンが強調表示される。

  4. 「Display Source」をクリックする。メイン・ウィンドウのソース表示にそのルーチンのソース・コードが表示される。命令ビューの命令ディスプレイをオープンしている場合,この表示が更新され,そのルーチンの命令コードが表示される。



10.1.3 目的のソース・コードを表示できない場合

ソース・コードを表示できない場合には,次のような原因が考えられます。

  • デバッグ・オプションを指定しないでリンクまたはコンパイルされた

  • シンボリック情報が得られないシステム・ルーチンやライブラリ・ルーチンの中で実行が一時停止する。そのような場合,プッシュ・ボタン・ビューで「S/Ret」ボタンを何回かクリックすれば,その呼び出し元ルーチンの実行にすぐ戻ることができる ( 第 10.3.5 項 を参照 )。

  • コンパイル後にソース・ファイルが別のディレクトリに移動されている。 第 10.1.4 項 で,ソース・ファイルの場所をデバッガに指示する方法について説明する。

表示するソース・コードが見つからない場合,呼び出しスタックにある次のルーチンのソース・コードの表示が試行されます。そのようなルーチンのソース・コードが表示される場合,現在位置ポインタは,戻り先の呼び出し元ルーチンのソース行を示すために移動します。

10.1.4 ソース・ファイルの記憶位置の指定

ソース・ファイルの特性と記憶位置についての情報は,プログラムのデバッグ・シンボル・テーブルに入っています。ソース・ファイルがコンパイル後に別のディレクトリに移動された場合,そのソース・ファイルが見つからないことがあります。ソース・ファイルの記憶位置をデバッガに指示するには, DBG> プロンプトで SET SOURCE コマンドを入力します ( 第 8.3 節 を参照)。

10.2 ユーザ・プログラムの編集

OpenVMS デバッガには簡単なテキスト・エディタが用意されており,ユーザ・プログラムをデバッグ中にソース・ファイルを編集することができます ( 図 10-3 を参照)。

デバッガの HP DECwindows Motif for OpenVMS メニュー・インタフェースで使用できるテキスト・エディタは,簡単な機能のエディタであるため,ランゲージ・センシティブ・エディタ (LSE) のような優れた機能を持つエディタにはおよびません。ただし「Commands」メニューの「Edit File」項目で起動するテキスト・エディタに,このような優れた機能を持つエディタを使用することはできません。内蔵エディタ以外のエディタを使用する場合は,コマンド・ビューの DBG> プロンプトで Edit コマンドを入力します ( 本書の第 3 部にある EDIT コマンドの項を参照 )。

  注意
コマンド・プロンプトに対して EDIT コマンドを入力すると,デバッガはデバッグ・セッションを起動した DECterm ウィンドウをユーザ定義エディタ・ウィンドウとして使用します (COMMANDS EDIT FILE プルダウン・メニューにハードワイヤ接続されているデバッガの組み込みエディタは使用されません )。この動作により,エディタを柔軟に選択できるようになります。FILE EXIT または MWM Close を使用して,この DECterm ウィンドウを誤って終了した場合には,デバッグ・セッションは異常終了し,親ウィンドウが失われます。

図 10-3 エディタ・ウィンドウ


エディタを起動するには,メイン・ウィンドウの「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」を選択します。変更したバッファをクローズしたり,デバッガを終了したりする前に,その内容を保存していない場合は,警告メッセージが表示されます。

ソース・コードを変更して,その結果をテストするときは,次の手順で行います。

  1. デバッガを実行していないいDECtermウィンドウを選択する。

  2. プログラムをコンパイルし直す。

  3. プログラムをリンクし直す。

  4. デバッグ・セッションに戻る。

  5. メイン・ウィンドウの「File」メニューから「Run Image...」を選択する。



10.3 プログラムの実行

この節では次の 3 つの内容について説明します。

  • プログラムの実行停止箇所の特定

  • プログラム実行の開始または再開

  • プログラムのソース行の 1 行ずつの実行

現在のデバッグ・セッションで自分のプログラムを再実行したり別のプログラムを実行したりする方法については, 第 9.3 節第 9.4 節 を参照してください。

10.3.1 実行の停止箇所の特定

プログラムの実行が一時停止している箇所を明らかにするには,次の手順に従ってください。

  1. 現在位置ポインタがソース・ウィンドウに表示されていない場合,ソース・ウィンドウの「Call Stack」メニューをクリックして,現在位置ポインタを表示する( 図 10-1 を参照)。

  2. 現在位置ポインタを見る。

    • 塗りつぶしポインタの場合,そのポインタが指しているソース行のコードが次に実行される( 第 10.1 節 を参照)。この場合「Call Stack」メニューには,常に有効範囲レベル0のルーチン(実行の停止中) が示される。

    • 白抜きのポインタの場合,表示コードは呼び出し元ルーチンのソース・コードであり,ポインタは戻り先の呼び出し元ルーチン内のソース行を示している。

      • 「Call Stack」メニューでレベル 0 が示されている場合,実行が一時停止しているルーチンのソース・コードの表示はできない ( 第 10.1.3 項 を参照)。

      • 「Call Stack」メニューで 0 以外のレベルが表示されている場合,呼び出し元ルーチンのソース・コードが表示されている ( 第 10.6.2 項 を参照)。

呼び出しスタック上で現在アクティブなルーチン呼び出しの並びの一覧を表示するには,「Call Stack」メニューをクリックします。レベル 0 は実行が一時停止しているルーチンを示し,レベル 1 は呼び出し元ルーチンを示します。

10.3.2 プログラム実行の開始または再開

現在位置からプログラムの実行を開始したり実行を再開したりするには,プッシュ・ボタン・ビューで「Go」ボタンをクリックします ( 図 8-3 を参照)。

次のような状況では,デバッガの介入なしに自由にプログラムを実行するのが便利です。

  • 無限ループの有無をテストする場合。この場合は,まず実行を開始する。プログラムが終了しないのでループしていると思われる場合は,「Stop」ボタンをクリックする。メイン・ウィンドウにはユーザが割り込んだ箇所が表示され,「Call Stack」メニューにはその箇所でのルーチン呼び出しの並びが示される ( 第 10.3.1 項 を参照)。

  • プログラムを特定の記憶位置まで直接実行する場合。この場合は,その記憶位置にブレークポイントを設定してから ( 第 10.4 節 を参照),実行を開始する。

プログラムを開始すると,次のいずれかが発生するまで実行が続きます。

  • プログラムの実行が完了する。

  • ブレークポイントに到達する (条件が真である条件付きブレークポイントを含む)。

  • ウォッチポイントが検出される。

  • 例外がシグナル通知される。

  • ユーザがプッシュ・ボタン・ビューの「Stop」ボタンをクリックする。

プログラムの実行が中断すると,メイン・ウィンドウの表示が更新され,現在位置ポインタは次に実行されるコードの行を示します。

10.3.3 プログラムのソース行の 1 行ずつの実行

プログラムのソース行を 1 行ずつ実行するには,プッシュ・ボタン・ビューで 「STEP」ボタンをクリックするか,またはコマンド・ビューでSTEPコマンドを入力します。このデバッグ方法 (ステップ実行と呼ぶ) はよく使用されます。

ソース行が1行実行されると,ソース・ビューが更新され,現在位置ポインタは次に実行される行を示します。

ソース行とステップ実行の動作については,次の点に注意してください。

  • 1 行のソース行は,使用する言語とコーディング方法により,1 つまたは複数のプログラミング言語要素で構成される。

  • 「Step」ボタンをクリックすると,デバッガは実行可能な行を 1 行実行し,その次に実行可能な行の始めで実行を中断する。この場合,途中の実行不可能な行はスキップされる。

  • 実行可能な行は,コンパイラによって生成された命令の行である (たとえば,ルーチン呼び出し文の行や代入文の行)。メイン・ウィンドウでは,実行可能な各行の左にボタンが表示される。

  • 実行不可能な行には,たとえばコメント行や値を代入しない変数宣言の行がある。メイン・ウィンドウでは,実行不可能な行の左にはボタンは表示されない。

コンパイル時にコードを最適化した場合,表示されるソース・コードと実際に実行しているコードとが対応しないことがあるので注意してください ( 第 1.2 節 を参照)。


目次 索引

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