前へ | 次へ | 目次 | 索引 |
トレースバック・ディスプレイが現れたら,調べているセグメントに最も緊密に対応するトレースバック・エントリを探します。ほとんどの場合,セグメント・タイプ名とトレースバックのルーチン名とを比較することで見つけられます。
見つかったトレースバック・エントリ上で MB1 をダブル・クリックすると,そのエントリに対応したソース・コードが「Source」ウィンドウに(強調)表示されます。次に,ソース・コード・ディスプレイをスクロールして,問題のあるコードを特定し,修正方法を決定することができます。
表示されたソース・コードに問題が見当たらない場合は,「Information」ウィンドウに戻り,前に選択したルーチンの直前または直後のルーチンを MB1 でダブル・クリックします。
トレースバック・エントリ上で MB1 をダブル・クリックしたときに 'Source Not Available' というメッセージが「Source」ウィンドウに表示された場合は,ヒープ・アナライザ・セッションの開始時にソース・ディレクトリの設定を忘れていた可能性があります。検索ディレクトリの設定については,第 12.1.5 項 を参照してください。
図 12-7 に,「Information」ウィンドウ内で強調表示されているトレースバック・エントリを MB1 でダブル・クリックしたときに表示されるソース・コードを示します。この図には,「Source」ウィンドウと「Information」ウィンドウ内で使用できるマウスとメニューのすべての選択項目を示してあります。
図 12-7 ヒープ・アナライザの「Information」ウィンドウと「Source」ウィンドウ
1. 「Information」ウィンドウ | MB1 のダブル・クリック :「Information」ウィンドウに表示されているトレースバックの行から「Source」ウィンドウ内の対応するソース・コードへジャンプできる。 |
2. 「Information」ウィンドウ・ポップアップ | 「Go to Source」:「Information」ウィンドウに表示されているトレースバックの行から「Source」ウィンドウ内の対応するソース・コードへジャンプできる。 |
3. 「Display」メニュー | 「Clear Information Window」:「Information」ウィンドウのテキストやメッセージを消去する。 |
以下の各項では,省略時設定の「Memory Map」に表示されるメモリ・イベントが分かりにくく,問題の有無を判断できない場合に実行する手順について説明します。
こういう状況になるのは,ヒープ・アナライザが選択するセグメント・タイプ名が多すぎてユーザ・アプリケーションには不都合なときや,「Memory Map」内の表示が多すぎて問題のセグメントを見分けにくいときです。
このようなときは,次の 1 つまたはいくつかの方法を選択できます。
タイプ設定またはタイプ・ディスプレイを変更することで問題点が明らかになったら,省略時の「Memory Map」ディスプレイで作業する場合と同じ方法で問題を解決できます(詳しい説明は,第 12.2 節 を参照してください)。
12.3.1 詳細な情報についてのオプション
「Memory Map」を調べるとき,「Memory Map」の動きを要約した「Type」ヒストグラムを同時に参照したい場合があります。2 つのヒストグラムを背中合わせにした「Type」ヒストグラムには,「Memory Map」の各セグメント・タイプが,総セグメント数と総バイト数の何パーセントを占めているかが表示されます。
グラフィック表現を数値に変えるには,それぞれのセグメント・タイプを MB1 でクリックします。
総セグメント数と総バイト数は両ヒストグラムの上部に表示されます。
図 12-8 は,「Type」ヒストグラムに表示されたセグメント・タイプを示しています(図のウィンドウは全タイプを表示するためにサイズを変更しています)。この図には,「Type」ヒストグラム内で使用できるマウスとメニューのすべての選択項目を示してあります。
図 12-8 ヒープ・アナライザの「Type」ヒストグラム
1. 「Type」ヒストグラム | MB1 のクリック : 総セグメント数と総バイト数に占める各セグメントの使用率を表示する。 |
2. 「Type」ヒストグラム・ポップアップ |
「Display Type」: タイプ定義を「Information」ウィンドウに表示する。
「Go to Type」:「Type」ヒストグラム内のセグメント・タイプから「Views-and-Types」ディスプレイにある同一のセグメント・タイプへジャンプする。 「Do Not Use Type」:「Do-not-use Type」リストにセグメント・タイプを追加する。 |
12.3.2 タイプ設定の変更
「Memory Map」を調べると,ユーザには無意味なセグメント・タイプ名が見つかる場合があります。このような名前を「Do-not-use Type」リストに追加することで,セグメント名の変更と,必要な場合には「Memory Map」ディスプレイの再生成をヒープ・アナライザに指示します。
省略時の設定では,セグメント・タイプ名はセグメント作成時に割り当てられます。場合によっては要素の名前(たとえば,LIBRTL)が割り当てられることもありますが,ほとんどの場合,ヒープ・アナライザは呼び出しスタックを下方向へ検索してルーチン名を探し,そのルーチン名をセグメント・タイプ名として使用します。
アナライザが選択するルーチン名は,呼び出しスタック内にあり,「Do-not-use Type」リストによって禁止されていない最初のルーチン名です。先頭のルーチンが禁止されている場合は,順に次のルーチンを調べていきます。
省略時のこの動作は,「Memory Map」に次の問題を引き起こすことがあります。
呼び出しスタックの最初のルーチンが,下位レベルのメモリ管理ルーチンまたはユーティリティ・ルーチンである場合に起きる。ユーザ・アプリケーションの割り当てイベントの大部分はこれらのルーチンを使用するので,関連のない割り当てが同じタイプ名で 1 つにグループ化されて表示される。
この問題を防ぐには,ユーザ・アプリケーションを実行する前に,アプリケーション固有のメモリ管理ルーチンまたはユーティリティ・ルーチンの名前を「Do-not-use Type」リストに追加しておく。
呼び出しスタックの最初のルーチンが,ユーザの調べているレベルほどのアプリケーション・バウンドでない場合に起きる可能性がある。アプリケーションの各関数を反映したタイプ名を見ることが必要な場合は,中間のメモリ管理ルーチンに由来するタイプ名が表示されるとかえって不便になる。
呼び出しスタックの最初のルーチンがユーザ・アプリケーションの一部分を対象にしていて,ユーザがその部分に関心がない場合も,この問題が起きる可能性がある。サブシステムの関数(たとえば,initialize_death_star)を反映したタイプ名を見ることが必要な場合,サブシステムの全関数(たとえば,initialize_star)が 1 つのタイプ名で表示されては不便になる。
この問題を修正するには,「Memory Map」に反映される抽象化レベルがユーザの希望と一致するまで,現在のタイプ名を「Do-not-use Type」リストに追加していく。
セグメント・タイプ名を「Do-not-use Type」リストに追加するには,プルダウンの「Options」メニューから「Add to Do-not-use Type List」を選択するか,または「Memory Map」,「Type」ヒストグラム,および「Views-and-Types」ディスプレイの各ポップアップ・メニューで「Do Not Use Type」を選択します。「Do-not-use Type」リストからセグメント・タイプを削除するには,「Do-not-use Type」リストのポップアップ・メニューで「Use Type」を選択します。
「Do-not-use Type」リストの内容を保存するには,「Options」メニューで「Save Do-not-use Type」リストを選択します。今後のヒープ・アナライザ・セッション用にリストの内容が保存されます。メニュー項目の「Restore Do-not-use Type」リストを使用すると,リストの最後の保存後の追加分が削除されます。
図 12-9 に,「Add to Do-not-use Type」リスト・ダイアログ・ボックスへの LIBRTL \*\* の入力を示します。このダイアログ・ボックスは「Options」メニューから選択できます。この図には,「Do-not-use Type」リスト内で使用できるマウスとメニューのすべての選択項目を示してあります。
図 12-9 ヒープ・アナライザの「Do-not-use Type」リスト
1. 「Do-not-use Type」 リスト・ポップアップ |
「Use Type」:「Do-not-use Type」リストからセグメント・タイプを削除する。 |
2. 「Options」メニュー |
「Add to Do-not-use Type List」:「Do-not-use Type」リストにセグメント・タイプを追加する。
「Save Do-not-use Type List」:「Do-not-use Type」リストに表示されているセグメント・タイプを保存する。次のヒープ・アナライザ・セッションで使用できる。 「Restore Do-not-use Type List」:「Do-not-use Type」リストを最後に保存してからの追加分を削除する。 |
3. 「Memory Map」ポップアップ 「Type」 ヒストグラムポップアップ 「Views-and-Types」 ディスプレイ・ポップアップ |
「Do Not Use Type」:「Do-not-use Type」リストにセグメント・タイプを追加する。 |
12.3.3 「Views-and-Types」ディスプレイの変更
「Memory Map」を調べるとき,重要な領域がはっきりするようにタイプ・ディスプレイを変更しなければならない場合があります。「Views-and-Types」ディスプレイでは,同じタイプの複数または個々のセグメントに対して変更を指定できます。
「Views-and-Types」ディスプレイは実際は 2 つのウィンドウからなり,枠で区切られています。左のウィンドウは拡大して,ユーザ・アプリケーション内の既知のタイプをすべて表示できます。右のウィンドウにはディスプレイ・オプション(色,表示状態,拡大状態,保存状態)が表示されます。
12.3.3.1 変更の有効範囲の選択
ヒープ・アナライザは OpenVMS の 4 つのメモリ・マネージャからセグメントについての情報を受け取ります。これらのメモリ・マネージャは,メモリ空間の割り当てと割り当て解除を実行します。各メモリ・マネージャが持つ動的メモリのビュー(全体像)は少しずつ異なっています。
メモリ・マネージャが認識するセグメント・タイプのセットは,マネージャごとに異なります。これは,各メモリ・マネージャからのビューが互いに重なっている部分では,ヒープ・アナライザ内で,単一のメモリ記憶位置が 1 つまたは複数のセグメント・タイプと対応する場合があることを意味します。
「Views-and-Types」ディスプレイの左のウィンドウには,この重なりを反映した階層が表示されます。
各メモリ・マネージャが認識している個々のセグメント・タイプを表示するには,「Blocks」,「Images」,「Regions」,「Zones」の各キーワードを MB1 でダブル・クリックして,省略時設定の表示を拡大します。それぞれの表示を元に戻すには,前に選択したキーワードを MB3 でクリックします。
この階層で次の有効範囲を選択できます。
図 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」ボタン | 選択を取り消す。 |
前へ | 次へ | 目次 | 索引 |