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


目次 索引



「Memory Map」を調べるとき,重要な領域がはっきりするようにタイプ・ディスプレイを変更しなければならない場合があります。「Views-and-Types」ディスプレイでは,同じタイプの複数または個々のセグメントに対して変更を指定できます。

「Views-and-Types」ディスプレイは実際は 2 つのウィンドウからなり,枠で区切られています。左のウィンドウは拡大して,ユーザ・アプリケーション内の既知のタイプをすべて表示できます。右のウィンドウにはディスプレイ・オプション ( 色,表示状態,拡大状態,保存状態 ) が表示されます。

ヒープ・アナライザは OpenVMS の 4 つのメモリ・マネージャからセグメントについての情報を受け取ります。これらのメモリ・マネージャは,メモリ空間の割り当てと割り当て解除を実行します。各メモリ・マネージャが持つ動的メモリのビュー ( 全体像 ) は少しずつ異なっています。

メモリ・マネージャが認識するセグメント・タイプのセットは,マネージャごとに異なります。これは,各メモリ・マネージャからのビューが互いに重なっている部分では,ヒープ・アナライザ内で,単一のメモリ記憶位置が 1 つまたは複数のセグメント・タイプと対応する場合があることを意味します。

「Views-and-Types」ディスプレイの左のウィンドウには,この重なりを反映した階層が表示されます。

  • 「Views」(4 つのビューをすべて統合する)

  • 「Blocks」(LIB$VM メモリ・マネージャからのブロック・ビュー)

  • 「Images」(SYS$IMAGE メモリ・マネージャからのイメージ・ビュー)

  • 「Regions」(SYS$SERVICES メモリ・マネージャからのシステム・サービス・ビュー)

  • 「Zones」(LIB$VM_ZONE メモリ・マネージャからのゾーン・ビュー)

各メモリ・マネージャが認識している個々のセグメント・タイプを表示するには,「Blocks」,「Images」,「Regions」,「Zones」の各キーワードを MB1 でダブル・クリックして,省略時設定の表示を拡大します。それぞれの表示を元に戻すには,前に選択したキーワードを MB3 でクリックします。

この階層で次の有効範囲を選択できます。

  • すべてのビューの全セグメント・タイプに作用させるには,「Views」キーワードを MB1 でクリックする。

  • 1 つのビューの全セグメント・タイプに作用させるには,「Blocks」,「Images」,「Regions」,「Zones」の各キーワードを MB1 でダブル・クリックする。

  • 個々のセグメント・タイプに作用させるには,選択するビューを MB1 でダブル・クリックしてから,1 つまたは複数の単一のセグメント・タイプを MB1 でクリックする。

図 12-10 に,「Blocks」の階層の項目を示します。「Blocks」を MB1 でクリックして全ブロックを選択すると,「Blocks」が強調表示されます。この図には,「Views-and-Types」ディスプレイの階層側で使用できるマウスとメニューのすべての選択項目も示してあります。

図 12-10 ヒープ・アナライザの「Views-and-Types」の階層


1. MB1 のダブル・クリック 「Views-and-Types」の階層を拡大 ( または縮小 ) する。
2. 「Views-and-Types」階層のポップアップ 「Display Type」: タイプ定義を「Information」ウィンドウに表示する。

「Go to Type」:「Views-and-Types」ディスプレイ内で選択したタイプを強調表示する。

「Do Not Use Type」:「Do-not-use Type」リストにセグメント・タイプを追加する。



「Views-and-Types」ディスプレイの右ウィンドウには,使用可能な次のディスプレイ・オプションがあります。


  • 全セグメント・タイプ,特定のビューだけの全セグメント・タイプ,または個々のセグメント・タイプの色を変更するには,「Views-and-Types」ディスプレイの色のボタンを MB3 でクリックする。縦の色の帯が表示されたら,選択する色を MB1 でクリックする。その後「Apply」ボタンをクリックして,変更を実際に適用する。

  • 表示 ( または表示しない ) 状態
    全セグメント・タイプ,特定のビューだけの全セグメント・タイプ,または個々のセグメント・タイプのディスプレイを抑制 ( または復元 ) するには,「Show」ボタンを選択して設定を「Hide」または「Show」に切り替えてから MB1 をクリックする ( または,「Show」ポップアップ・メニューで適切なメニュー項目を選択する方法もある )。その後「Apply」ボタンをクリックして,変更を実際に適用する。
    調べないセグメントの「Memory Map」を消去する場合に,このオプションを使用する。このオプションを使用して,他のタイプの全セグメントを表示しないようにすれば,特定のタイプのセグメントをすべて見つけることもできる。

  • 拡大 (または縮小) 状態
    全セグメント・タイプ,特定のビューだけの全セグメント・タイプ,または個々のセグメント・タイプのディスプレイを縮小 ( または拡大 ) するには,「Expand」ボタンを選択して設定を「Collapse」または「Expand」に切り替えてから MB1 をクリックする ( または,「Expand」ポップアップ・メニューで適切なメニュー項目を選択する方法もある )。その後「Apply」ボタンをクリックして,変更を実際に適用する。
    ネストしたセグメントは調べないので,そのようなセグメントの「Memory Map」を消去する場合に,このオプションを使用する。ユーザ・アプリケーションによっては,ヒープ・アナライザの性能も向上することがある。

  • 保存 (または削除) 状態
    全セグメント・タイプ,特定のビューだけの全セグメント・タイプ,または個々のセグメント・タイプについての情報を削除 ( または保存 ) するには,「Save」ボタンを選択して設定を「Remove」または「Save」に切り替えてから MB1 をクリックする ( または,「Expand」ポップアップ・メニューで適切なメニュー項目を選択する方法もある )。その後「Apply」ボタンをクリックして,変更を実際に適用する。
    「Memory Map」を完全に消去してからもう一度表示する場合に,このオプションを使用する。会話型のコマンドを調べる場合にこのオプションがいかに有効であるかの説明については, 第 12.5 節 を参照。

選択を取り消すには,「Reset」ボタンをクリックするか,または「Show」,「Expand」,「Save」の各ポップアップ・メニューで「Reset」を選択します。

図 12-11 に,「Show」ポップアップ・メニューを示します。このメニューは,「Views-and-Types」ディスプレイのオプション側で MB3 をクリックすると表示されます。すでに強調表示されている「Blocks」が変更の有効範囲です。この図には,「Views-and-Types」ディスプレイのオプション側で使用できるマウスとメニューのすべての選択項目も示してあります。

図 12-11 ヒープ・アナライザの「Views-and-Types」ディスプレイのオプション


1. MB1 のクリック 「Show」,「Expand」,「Save」の各トグル・ボタンを切り替える。
2. 「Color」
ポップアップ
個々のまたはグループ化したタイプの表示色を調節する。
3. 「Show」
ポップアップ
選択したセグメント・タイプの表示を制御する。「Show」と「Hide」の各メニュー項目で表示を復元または抑制できる。選択は「Reset」で取り消される。
4. 「Expand」
ポップアップ
選択したセグメント・タイプ内のセグメントの表示を制御する。「Expand」と「Collapse」の各メニュー項目で表示を復元または抑制できる。選択は「Reset」で取り消される。
5. 「Save」
ポップアップ
選択したセグメント・タイプについての情報を表示または格納するヒープ・アナライザの機能を制御する。「Remove」メニュー項目は情報をすべて削除する。「Save」は表示機能を元に戻し,情報を保存する。選択は「Reset」で取り消される。
6.「Apply」ボタン 選択した内容を「Memory Map」ディスプレイに適用する。
7.「Reset」ボタン 選択を取り消す。



12.4 ヒープ・アナライザの終了

ヒープ・アナライザを終了するには,ヒープ・アナライザ画面の「File」メニューで「Exit」を選択します。

12.5 サンプル・セッション

この節では,ヒープ・アナライザの各ウィンドウとメニューから得られる情報をまとめて,ユーザ・アプリケーションにある特定のメモリ・リークを見つける方法の例を示します。

この例では,すでにヒープ・アナライザを起動し,ユーザ・アプリケーションを実行してあると考えます。「Memory Map」ディスプレイをスクロールして戻しながら,ユーザ・アプリケーションが会話型コマンドを呼び出したときに表示されるセグメントに注目します。

12.5.1 会話型コマンドの表示の取り出し

メモリ・リークが生じたのは,会話型コマンド SHOW UNITS を入力したときかもしれません。そこで最初の手順として,「Memory Map」を消去し,このコマンドを再入力してみます。

「Memory Map」を消去して SHOW UNITS コマンドを再入力するには,次の手順に従います。

  1. 「Views-and-Types」ディスプレイの「Views」項目の「Remove」オプションをクリックしてから,「Apply」ボタンをクリックする。
    「Memory Map」内の以前の出力がすべて消去される。

  2. 「Views」項目の「Save」オプションをクリックしてから,「Apply」ボタンをクリックする。
    以後の「Memory Map」への出力が,すべて保存される。

  3. 別の DECterm ウィンドウ内で,ユーザ・アプリケーションのプロンプトに SHOW UNITS コマンドをいくつか入力する。
    小さく表示された一連のセグメントは増分されているらしいが,表示が小さすぎて確認できない。

  4. 「Zoom」メニューの「Extremely Close」を選択する。
    セグメントのビューが拡大表示される。

それぞれの SCA__MEM_GET_VM セグメントに割り当てられたメモリ空間は, SHOW UNITS コマンドごとに少しずつ増大しています ( 図 12-12 を参照 )。同一サイズのはずの割り当てが増大していることは,メモリ・リークの発生を示しています。

図 12-12 メモリ・リークを示すメモリ割り当ての増分




各セグメントに対応したセグメント・タイプには,SCA__MEM_GET_VM というラベルが付けられています。これはかなり下位レベルでのメモリ管理ルーチンであり,多数のセグメントがこのルーチンを共有しています。次の手順は,セグメント・タイプを再定義して,抽象化レベルをもっと役に立つものにすることです。できればアプリケーションのルーチン名と対応させます。

セグメント・タイプを再定義するには,次の手順に従います。

  • いずれかのセグメントにマウス・ポインタを置いてから,MB3 をクリックする。
    コンテキスト依存の「Memory Map」ポップアップ・メニューが表示される。

  • ポップアップ・メニューで「Do Not Use Type」を選択する。
    セグメントに対応したセグメント・タイプが,SCA__MEM_GET_VM から,有用な "crl_begin_unit_query" に変更される ( 図 12-13 を参照 )。

図 12-13 セグメント・タイプを再定義する「Do-Not-Use Type」メニュー項目




セグメントを表示する抽象化レベルを決定したら,次は,セグメントが割り当てられたときの呼び出しスタックの状態を調べます。セグメントごとのトレースバックを調べると,セグメントが作成された時点と理由,およびメモリに問題が生じた理由が分かります。

トレースバック情報を表示するには,次の手順に従います。

  1. セグメントにマウス・ポインタを置いてから,MB3 をクリックする。
    コンテキスト依存の「Memory Map」ポップアップ・メニューが表示される。

  2. ポップアップ・メニューで「Traceback of Allocation」を選択する。
    セグメントのトレースバック情報が「Information」ウィンドウに表示される。



12.5.4 トレースバックとソース・コードとの相互対応

セグメントのトレースバックは,crl_begin_unit_query ルーチンが SHOW UNITS コマンド用の環境を設定していることを示しています。このイベントをさらに詳しく調べるには,イベントに対応したソース・コードを表示させます。

ソース・コードを表示するには,crl_begin_unit_query を参照するトレースバック行を MB1 でダブルクリックします。

「Source」ウィンドウにソース・コードが表示されます。 crl_begin_unit_query を呼び出しスタックに置いたルーチン呼び出しが強調表示されます ( 図 12-14 を参照 )。

図 12-14 トレースバック・エントリのクリックによる,対応したソース・コードの表示




トレースバック・エントリをアプリケーション・ソース・コードのルーチンと結び付けた後,「Source」ウィンドウを拡大して,ソース・コードの記憶位置で割り当てエラーを探すことができます。

たとえば, 図 12-15 では,強調表示されている 5725 行目が unit_query への割り当てを行っています。この割り当ては,別の割り当てが行われる 5740 行目より前で割り当て解除されていません。このコーディング・エラーがメモリ・リークの原因です。

図 12-15 二重の割り当てを示すソース・コード



目次 索引

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