動的な関数とモジュール
使用している C または C++ プログラムが、関数を動的にコンパイルしてデータ空間に取り込む場合、動的関数やモジュールのデータをパフォーマンスアナライザに表示するには、コレクタに情報を与える必要があります。この情報は、コレクタ API 関数の呼び出しによって渡されます。API 関数の定義は、次のとおりです。
void collector_func_load(char *name, char *alias,
char *sourcename, void *vaddr, int size, int lntsize,
Lineno *lntable);
void collector_func_unload(void *vaddr);
Java HotSpot 仮想マシンによってコンパイルされる Java メソッドには別のインタフェースが使用されるので、これらの API 関数を使用する必要はありません。Java インタフェースは、コンパイルされたメソッドの名前をコレクタに知らせます。 Java コンパイル済みメソッドの関数データと注釈付き逆アセンブリのリストを見ることはできますが、注釈付きソースリストを見ることはできません。
このセクションでは、API 関数について説明します。
collector_func_load() 関数
実験への記録のため、動的にコンパイルされた関数に関する情報をコレクタに渡します。パラメータリストを次の表に示します。
表 3-1 collector_func_load() のパラメータリスト
|
|
name
|
パフォーマンスツールで使用する、動的にコンパイルされた関数の名前。実際の関数名でなくてもかまいません。この名前は関数の通常の命名規則に従っている必要はありませんが、空白文字や引用符は含めないようにします。
|
alias
|
関数の説明に使用する任意の文字列。NULL も使用できます。この文字列が解釈の対象となることはありません。空白文字を含めることができます。アナライザの「サマリー」タブに表示されます。何の関数であるか、またはなぜ関数が動的に構築されたかを示すために使用できます。
|
sourcename
|
関数の構築元であるソースファイルのパス。NULL も使用できます。このソースファイルは、注釈付きソースリストに使用されます。
|
vaddr
|
関数が読み込まれたアドレス。
|
size
|
バイト数による関数のサイズ。
|
lntsize
|
行番号テーブルのエントリの数を示すカウント。行番号情報がない場合には、ゼロとなります。
|
lntable
|
lntsize エントリが入っているテーブル。各エントリは、整数対です。第 1 整数はオフセット、第 2 整数は行番号です。あるエントリのオフセットと次のエントリのオフセットとの間の命令はすべて、最初のエントリの行番号に対応します。オフセットは数値の昇順にする必要がありますが、行番号の順序は任意です。lntable が NULL の場合、関数のソースリストは利用できませんが、逆アセンブリリストは利用できます。
|
|
collector_func_unload() 関数
アドレス vaddr にある動的関数がアンロードされたことをコレクタに通知します。