修正日: 07/10/23
MallocDebug
Performance Tools入門 その1
4. ブラウザを操作する
ブラウザの表示内容を変更したり、操作したりする方法を簡単に紹介します。(1) All Allocationsポップアップボタン
このポップアップボタンでブラウザに表示するデータの種類を選択します(図3)。
【図3】 All Allocationsポップアップ
・All Allocations
現在保持しているすべてのメモリブロックを表示します。既に解放されたメモリは表示しません。
・Allocations from mark
Markボタンを押された後に確保されたメモリのみを表示します。例えば起動が終わってMarkボタンを押し、何らかの処理を行います。処理が完了して「Allocations from mark」を選択すると、起動時に確保されたメモリは表示されず、その処理内で新たに確保されたメモリブロック(解放されていないもの)のみが一覧で表示されます。
・Leaks
リークしていると考えられるメモリブロックを表示します。 →4項
・Over/underruns
バッファオーバーラン/アンダーランが発生したと考えられるメモリブロックを表示します。 →6項
(2) Standardポップアップボタン
このポップアップボタンでブラウザ内でのツリーの表示形式を変えることができます(図4)。
【図4】 Standardポップアップ
・Standard
関数呼出しのツリーを上から下へ表示します
・Flat
ブラウザの1カラム目に全関数を表示します
・Inverted
関数呼出しのツリーを下から上へ(実際のメモリ割当関数からそれを呼び出した関数へ)表示します
(3) Size In:ポップアップボタン
ブラウザ右上のポップアップでブラウザ各カラムの左側のメモリの表示方法を変更できます(図5)。またポップアップメニュー下には現在ブラウザで表示しているメモリブロックの数とバイト数が表示されます。(All Allocationsであればすべてのメモリの量、Leaksであればリークしているメモリの量)
【図5】 Size In:ポップアップ
・Bytes
割り当てられているメモリのバイト数を表示します
・Count
割り当てられているメモリのブロック数を表示します
(4) パスの移動
Edit→Decendでブラウザ内のパスの移動を行うことができます(図6)。いちいちキーボードを叩いたり、マウスで選択したりしなくても、一気に分岐点あるいは一番下まで移動することができます。
【図6】 Descendメニュー
・Max Path
最もメモリサイズの大きいパスを一番下まで移動
・Unique Path
パスがいくつかに分岐しているところまで移動
(5) Prune
既知の(問題の無い)関数をブラウザに表示しないようにします(図7)。例えば起動時のNibファイルの読み込みに関する関数は最適化するメリットがあまり無いためPruneで表示しないようにしておくと、自前の関数の最適化に集中することができます。
【図7】 Pruneメニュー
・Selection
選択中の関数が割り当てたアプリケーション内全てのメモリを除外
・Path
選択中のパスの関数が割り当てたメモリを除外
・Not in this library
選択中の関数のライブラリ以外のライブラリで確保されたメモリを除外
・Zone
ゾーンインスペクタ( →5項)で選択中のゾーンに割り当てられているメモリを全て除外
・Unprune
全てのデータを表示する
(6) メモリブロックテーブル
実際にメモリを割り当てている関数を選択すると、ブラウザの下に割り当てられたメモリブロックの一覧が表示されます(図8)。各行をダブルクリックするとメモリインスペクタウィンドウで、各ブロックのバイナリデータを表示することができます。→5項
【図8】 メモリブロックテーブル
・Status
メモリブロックの状態を表示します。バッファオーバーランの時は「>」がバッファアンダーランの場合は「<」が表示されます。 →7項
・Address
メモリブロックのアドレスを表示します。
・Size
メモリブロックのサイズを表示します。
・Zone
メモリが割り当てられているZoneの名前を表示します。
(7) Sorted By:ポップアップボタン
メモリブロックテーブルの行の並び順を変更します(図9)。
【図9】 Sorted By:ポップアップ
・Size
ブロックのサイズ順
・Time
ブロックが割り当てられた時間順
・Zone
ブロックが割り当てられているゾーンの名前順