前へ | 次へ | 目次 | 索引 |
ヒープ・アナライザの「Memory Map」の上には 5 つのプルダウン・メニューがあります(図 12-2 を参照)。メニュー項目をすべて示すために,この図は少し修正してあります。
図 12-2 ヒープ・アナライザのプルダウン・メニュー
1.「File」メニュー | ヒープ・アナライザを終了する。 |
2.「Display」メニュー | 「Memory Map」ディスプレイを調整したり,「Information」ウィンドウを消去する。 |
3.「Zoom」メニュー | 「Memory Map」のビューを拡大または縮小する。 |
4.「View」メニュー | ディスプレイの粒度を選ぶ。 |
5.「Options」メニュー | 検索ディレクトリ・リストを指定したり,「Do-not-use Type」リストを修正する。 |
6.「Help」メニュー | コンテキスト依存またはタスク指向のオンライン・ヘルプを表示する。 |
12.1.4 ヒープ・アナライザのコンテキスト依存のメニュー
ヒープ・アナライザのほとんどの操作は,コンテキスト依存のポップアップ・メニューから実行できます。ヒープ・アナライザのほとんどのウィンドウには,使用可能なタスクを並べたポップアップ・メニューがあります(図 12-3 を参照)。各ウィンドウのポップアップ・メニューにアクセスするには,そのウィンドウの中にマウス・ポインタを置いて MB3 をクリックします。
図 12-3 ヒープ・アナライザのコンテキスト依存のポップアップ・メニュー
1.「Memory Map」ポップアップ | 「Memory Map」に表示されているセグメントについての追加情報を表示する。「Views-and-Types」ディスプレイにあるセグメント・タイプにジャンプする。また,「Do-not-use Type」リストにセグメント・タイプを追加する。 |
2.「Information」ウィンドウ・ポップアップ | 「Information」ウィンドウに表示されているトレースバックの行から,「Source」ウィンドウにある対応したソース・コードへジャンプする。 |
3.「Do-not-use Type」リスト・ポップアップ | 「Do-not-use Type」リストからセグメント・タイプを削除する。 |
4.「Views-and-Types」ディスプレイ・ポップアップ | 左側:表示されているセグメント・タイプについての追加情報を表示する。「Views-and-Types」ディスプレイ内でセグメント・タイプを強調表示する。また,「Do-not-use Type」リストにセグメント・タイプを追加する。 右側: 「Views-and-Types」ディスプレイの左側で強調表示されたセグメント・タイプのディスプレイ属性を調整する。 |
5. 「Type」ヒストグラム・ポップアップ | 表示されているセグメント・タイプについての追加情報を表示する。「Type」ヒストグラム内でセグメント・タイプを強調表示する。また,「Do-not-use Type」リストにセグメント・タイプを追加する。 |
アプリケーションのソース・コードを格納しているディレクトリ以外のディレクトリからヒープ・アナライザを起動する場合は,起動画面が表示されてから,ヒープ・アナライザにソース・ディレクトリを設定することができます。
ソース・ディレクトリを設定するには,次の手順に従います。
「Set Source」ダイアログ・ボックスが表示される。
SET SOURCE コマンドについての詳しい説明は,『デバッガ・コマンド・ディクショナリ』を参照。
これでヒープ・アナライザがユーザ・アプリケーションにアクセスできます。
12.1.6 アプリケーションの起動
デバッグ・セッションの中からヒープ・アナライザを起動した場合は,次の手順に従ってユーザ・アプリケーションを起動します。
「Message」ウィンドウに "application starting" というメッセージが表示され,「Start」ボタンのラベルが「Step」に変わる。OpenVMS デバッガのメイン・ウィンドウが前面に出る。
ユーザ・アプリケーションに対応したメモリ・イベントの表示が,「Memory Map」内で開始される。
デバッグ・セッションの外でヒープ・アナライザを起動した場合は,上の手順の 1 だけを実行してユーザ・アプリケーションを起動してください。
アプリケーションが実行されると,「Memory Map」(および,ヒープ・アナライザの他の部分)は連続的に更新されて,ユーザ・アプリケーションの状態を反映します。
中断しなければ(第 12.1.7 項 を参照),この更新は,何らかのオカレンスによってメモリ・イベントが停止されるまで続きます。たとえば,ユーザ・アプリケーションが入力を求めるプロンプトを出す場合や,デバッガが入力を求めるプロンプトを出す場合,アプリケーションの実行が完了した場合などです。
12.1.7 表示速度の調節
アプリケーションを実行しながら「Memory Map」でイベントを調べる場合,ヒープ・アナライザのプッシュ・ボタンを使用して,表示の一時停止,低速化などの速度調節が行えます。図 12-4 は,「Start」ボタンが押された直後のヒープ・アナライザ・ウィンドウの様子で,これらのプッシュ・ボタンがどう表示されるかを表しています。
「Slow」と「Pause」のプッシュ・ボタンは,それぞれ表示を低速化または一時停止します。
「Step」プッシュ・ボタンは,メモリ・イベントを 1 ステップずつ進めます。
「Sync」ボタンの右側の「Sync」ヒストグラム(図には示されていない)は,アプリケーションからどれだけ離れてヒープ・アナライザが実行されているかを表します。性能面での理由から,ヒープ・アナライザにメモリ・イベントが表示されるのは,アプリケーション内でそのイベントが発生してから数秒後になります。
図 12-4 ヒープ・アナライザのコントロール・パネル
1.「Start」ボタン | クリックすると,アプリケーションの実行と「Memory Map」ディスプレイが開始する。開始すると「Start」ボタンは「Step」ボタンに変わる。「Step」ボタンは初めは薄く表示されている(アクセスできない)。 |
2.「Step」ボタン | クリックすると,「Memory Map」ディスプレイ内のメモリ・イベントが1 ステップずつ進むようになる。「Pause」ボタンをクリックするまでは薄く表示されている。 |
3.「Pause」ボタン | クリックすると,アプリケーションの実行と「Memory Map」の動的ディスプレイが一時停止する(または再開する)。 |
4.「Slow」ボタン | クリックすると,「Memory Map」の動的ディスプレイが低速になる。 |
5.「Sync」ボタン | クリックすると,ユーザ・アプリケーション・プログラムの実行と「Memory Map」内のメモリ・イベント・ディスプレイが同期する。 |
同時性が重要な場合,「Sync」プッシュ・ボタンを使用して,ヒープ・アナライザの表示とアプリケーションの実行とを同期させることができます。同期させるとアプリケーションの実行速度は低下します。
OpenVMS Alpha システムでは,デバッガやヒープ・アナライザのようにシステム・サービス・インタセプションを使用するものは,共有リンクによって起動されたシステム・サービス呼び出しイメージを受け取ることができません。そのためイメージを起動するプログラムは,イメージがリンクされているか /DEBUG を使って実行されている場合,共有リンクを避け,プライベート・イメージのコピーを起動するようにします。ただしこの場合,ヒープ・アナライザが制御するアプリケーションの性能に影響が現れ,共有リンクによって起動されたイメージほど高速に動作しなくなります。
12.2 省略時設定のディスプレイでの作業
以下の各項では,メモリに問題のあることが省略時設定の「Memory Map」ディスプレイを見て分かる場合に,ヒープ・アナライザをどう使用するかについて説明します。
見て分かる問題とは,割り当てが予想より大きすぎる,割り当てが頻繁に繰り返される,割り当てが行われるごとに割り当て量が増分される,より効率的な割り当てを行えることなどです。
そのような場合,ヒープ・アナライザ・セッションを次の手順で実行します。
「Memory Map」ディスプレイを調べるときは,ユーザ・アプリケーションのサイズに応じて,アプリケーション実行中に調査したい場合と実行完了後に調査したい場合とがあります。実行中は,プッシュ・ボタンを使用して,イベントを低速化または一時停止したり,1 ステップずつ進めたりできます。実行後は,「Memory Map」ディスプレイの縦のスクロール・バーを使用してディスプレイをスクロールできます。
サイズや記憶位置が期待と異なるセグメントを特定するには,「Memory Map」内のセグメントの位置が動的メモリ内のセグメントの記憶位置に対応していることを覚えておく必要があります。「Memory Map」ディスプレイの左上が動的メモリの最下位アドレスです。右へいくほど上位になり,表示は各行の右端から左端に折り返されます。
12.2.2 「Memory Map」ディスプレイのオプション
「Memory Map」を調べる場合,必要に応じてディスプレイ・オプションを選択すると,最も関心がある部分を分かりやすく表示することができます。
「Display」メニューでは,「Memory Map」内にセグメント・タイプ名を表示するかどうか,ディスプレイを自動的にスクロールして最新の動作を表示するかどうか,ディスプレイを圧縮するかどうかを指定できます。
「Zoom」メニューでは,「Memory Map」に表示されるセグメントの拡大率を指定できます。たとえば,「Far」メニュー項目を選択するとメモリを概観でき,「Extremely Close」を選択するとメモリの内容が詳細に表示されます。
図 12-5 に,「Display」プルダウン・メニューのディスプレイ・オプションを示します。この図には,「Memory Map」内で使用できるすべてのディスプレイ・オプションを示してあります。
図 12-5 ヒープ・アナライザの「Display」メニュー
1. 「Display」メニュー | 「Text Visible」(省略時の設定):「Memory Map」の各セグメントにセグメント名のラベルを付ける(セグメントに名前のラベルを表示できるだけの大きさが必要である)。
「Auto Scroll」(省略時の設定): ディスプレイを拡大するとき,最上位のメモリ・アドレス(画面右下)に合わせて「Memory Map」を自動的にスクロールする。 「Reduce Scroll Region」:「Memory Map」ディスプレイを制限したり,部分的に表示する場合(第 12.3.3.2 項),元の表示位置をスクロールせずに,できるだけ多くのセグメントを表示できるようにディスプレイを圧縮する。 「Display All Segments」:全セグメントのセグメント定義を「Memory Map」に表示する。 「Clear Information Window」:「Information」ウィンドウのテキストとメッセージを消去する。 |
2. 「Zoom」メニュー | 「Memory Map」のビューを拡大または縮小するオプションを表示する。 |
「Memory Map」ディスプレイを調べるとき,問題のありそうなセグメントについて,より多くの情報が必要になる場合があります。「Memory Map」ポップアップ・メニューでは,個々のセグメントのセグメント定義,内容定義,アドレス定義,およびタイプ定義を表示することができます。
セグメント定義の書式を次に示します。
cursor-address n:init-address + length = end-address name(view) |
cursor-address | MB3 をクリックしたときのカーソル位置のアドレス |
n | 一連の全セグメント中のセグメントの序数 |
init-address | セグメントの初期アドレス |
length | セグメント長(バイト数) |
end-address | セグメントの最終アドレス |
name | セグメントのセグメント・タイプ名 |
view | セグメントのビュー(ブロック,イメージ,リージョン,またはゾーン。各ビューについての詳しい説明は,第 12.3.3.2 項 を参照) |
たとえば,次のセグメント定義は「Memory Map」内の 15 番目のセグメントを表します。このセグメントのタイプは LIBRTL です。
0004ECA5 15: 00040000+0001CA00=0005CA00 LIBRTL(Image) |
内容定義は,部分的なセグメント定義(カーソル・アドレスのないセグメント定義)と,セグメント・アドレスの内容の ASCII 表現からなります。次に例を示します。
contents of: 38: 001C7000+000000C0=001C70C0 LIBTRL\LIB$VM\LIB$GET_VM(Block) [ASCII representation] |
アドレス定義は,指定されたアドレスへのユーザ・アクセスを文の形式で示します。次に例を示します。
001C710B is read and write accessible by the user |
タイプ定義は,セグメント・タイプが使用している総セグメント数と総バイト数を,要約した文の形式で示します。次に例を示します。
LIBRTL\LIB$VM\LIB$GET_VM(Block)has 39 segments using 00002160 bytes |
図 12-6 に,コンテキスト依存の「Memory Map」ポップアップ・メニューを示します。この図には,「Memory Map」内で使用できるマウスとポップアップ・メニューのすべての項目を示してあります。
図 12-6 ヒープ・アナライザのコンテキスト依存の「Memory Map」ポップアップ・メニュー
1. 「Memory Map」 | MB1 のクリック:「Message」ウィンドウにセグメント定義を表示する。 |
2. 「Memory Map」ポップアップ |
「Traceback of Allocation」: セグメントに対応したトレースバック情報を「Information」ウィンドウに表示する(第 12.2.4 項 を参照)。
「Display Segment」: セグメント定義を「Information」ウィンドウに表示する。 「Display Contents」: セグメント定義と各アドレスの内容を「Information」ウィンドウに表示する。 「Display Address」: カーソル位置のアドレスおよびユーザ・アクセスのタイプを「Information」ウィンドウに表示する。 「Display Type」: セグメント・タイプ定義を「Information」ウィンドウに表示する。 「Go to Type」:「Type」ヒストグラム内のセグメント・タイプから「Views-and-Types」ディスプレイにある同一のセグメント・タイプへジャンプする。 「Do Not Use Type」:「Do-not-use Type」リストにセグメント・タイプを追加する。 |
12.2.4 トレースバック情報の表示
問題のセグメントを個々に特定した後,「Memory Map」ポップアップ・メニューの「Traceback of Allocation」を選択します。トレースバック情報は,そのセグメントが作成された理由を知るのに役立ちます。トレースバックを調べることは,アプリケーション・コードを表示するための準備的な手順でもあります。
トレースバック情報は,部分的なセグメント定義(カーソル・アドレスのないセグメント定義)と,セグメント作成時に呼び出しスタック上にあった要素のリストで構成されます。要素の命名規約は,イメージ名\モジュール名\ルーチン名\行番号 です。次に例を示します。
traceback: 8:000BA800+00065C00=00120400 DECC$SHR(Image) 00066EDE DBG$HA_KERNEL 00005864 CRL$MAIN_DB\CRL_LIBRARY\crl__initialize_libraries\%LINE 5592 |
前へ | 次へ | 目次 | 索引 |