マニュアルページセク ション 1: ユーザーコマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

apptrace(1)

名前

apptrace - Solaris 共有ライブラリに対するアプリケーション関数呼び出しの追跡

形式

apptrace [-f] [-F [!] tracefromlist] [-T [!] tracetolist] [-o outputfile] [ [-tv] [!] call ,...] command [command arguments]

説明

apptrace ユーティリティは、command により指定された実行可能プログラムを実行して、プログラムの command が Solaris 共有ライブラリに対して行うすべての関数呼び出しを追跡します。apptrace における追跡では、プログラムによる関数呼び出しごとに、呼び出されたライブラリインタフェースの名前、渡された引数の値、および戻り値が報告されます。

デフォルトでは、apptrace は、実行可能オブジェクトからそれが依存するすべての共有オブジェクトに対する直接呼出しを追跡します。間接呼び出し (つまり、実行可能プログラムが依存する共有オブジェクト間で行われた呼び出し) は、デフォルトでは報告されません。

追加共有オブジェクトとの間で実行される呼び出しは、–F または –T オプションを指定することにより追跡できます (下記参照)。

デフォルトのレポート形式は、呼び出しごとに 1 行であり、参照によって渡された引数またはデータ構造体のフォーマット出力はありません。

追加引数の詳細を示すフォーマット出力は、–v オプションを使用すると得られます (下記参照)。

デフォルトでは、共有オブジェクトによって提供されるインタフェースは、呼び出された場合、すべて追跡されます。ただし、–t または –v オプションのいずれか、あるいは両方を使用することにより、追跡するインタフェース群を制限できます。

通常、実行時にリンクされる動的オブジェクト (実行可能オブジェクトと依存対象のすべての共有オブジェクト) 間の呼び出しを追跡することができるため、追跡された各呼び出しのレポートには、呼び出し元のオブジェクトの名前が示されます。

apptrace は、プロシージャリンケージテーブルを介して動的オブジェクト間で発生するすべてのプロシージャ呼び出しを追跡します。そのため、そのテーブルを介して結合されているプロシージャ呼び出しだけが追跡されます。Oracle Solaris 11.2 リンカーとライブラリガイド を参照してください。

オプション

サポートしているオプションは、次のとおりです。

–f

fork(2) によって作成されたすべての子プロセスを追跡します。また、各行の先頭にプロセス ID を表示します。

–F [!]tracefromlist

コンマで区切られた共有オブジェクトのリストからの呼び出しを追跡します。これらの共有オブジェクトからの呼び出しだけが追跡されます。デフォルトでは、メインの実行可能オブジェクトからの呼び出しだけが追跡されます。共有オブジェクトのベース名だけが必要になります。たとえば、libc/usr/lib/libc.so.1 に一致します。また、fnmatch(5) で説明されているように、シェルのワイルドカード文字がサポートされています。! が前に付いたリストは、そこからの呼び出しが追跡から除外されるオブジェクト群を定義します。command からの呼び出しの追跡が必要な場合、commandtracefromlist のメンバーでなければなりません。

–o outputfile

apptrace の出力を outputfile に送ります。デフォルトでは、apptrace の出力は、追跡されるプロセスの stderr ストリームに送られます。

–t [!]call, . . .

関数呼び出しを追跡、または除外します。コンマで区切られたリスト call に指定された呼び出しが追跡されます。リストが ! で始まる場合、指定した関数呼び出しが追跡出力から除外されます。デフォルト値は –t * です。シェルスタイルのワイルドカードを使用できます。

–T [!]tracetolist

コンマで区切られた共有オブジェクトのリストへの呼び出しを追跡します。デフォルトでは、すべての共有オブジェクトへの呼び出しが追跡されます。前述のとおり、ベース名だけが必要であり、ワイルドカードを使用できます。! が前に付いたリストは、そこへの呼び出しが追跡から除外されるオブジェクト群を示します。

–v [!]call, . . .

指定された関数呼び出しの引数と戻り値を示す冗長な、フォーマット出力を提供します (前述の –t オプションと同様)。truss(1) と違って、–v オプションで指定した呼び出しは、–t オプションで指定する必要はありません。たとえば、apptrace –v open は、truss –t open –v open と同等です。

使用例 1 date コマンドの追跡
% apptrace date
-> date     -> libc.so.1:atexit(0xff3bf9ac, 0x22000, 0x0) ** NR
-> date     -> libc.so.1:atexit(0x11550, 0xfefeef80, 0xab268) ** NR
-> date     -> libc.so.1:setlocale(0x6, 0x11560, 0x0) ** NR
-> date     -> libc.so.1:textdomain(0x11564, 0xfefce156, 0xff160200) ** NR
-> date     -> libc.so.1:int getopt(int = 0x1,
                        const char * * = 0xffbffa5c,
                        const char * = 0x11574 "a:u")
<- date     -> libc.so.1:getopt() = 0xffffffff
-> date     -> libc.so.1:time_t time(time_t * = 0x225c0)
<- date     -> libc.so.1:time() = 0x41ab6e82
-> date     -> libc.so.1:char * nl_langinfo(nl_item = 0x3a)
<- date     -> libc.so.1:nl_langinfo() = 0xfefd3e10
-> date     -> libc.so.1:struct tm * localtime(const time_t * = 0x225c0)
<- date     -> libc.so.1:localtime() = 0xff160240
-> date     -> libc.so.1:memcpy(0xffbff9cc, 0xff160240, 0x24) ** NR
-> date     -> libc.so.1:size_t strftime(char * = 0x225c4 "",
                        size_t = 0x400,
                        const char * = 0xfefd3e10 "%a %b %e %T %Z %Y",
                        const struct tm * = 0xffbff9cc)
<- date     -> libc.so.1:strftime() = 0x1c
-> date     -> libc.so.1:int puts(const char * = 0x225c4
                        "Mon Nov 29 10:46:26 PST 2004")
                        Mon Nov 29 10:46:26 PST 2004
<- date     -> libc.so.1:puts() = 0x1d
-> date     -> libc.so.1:exit(0x0, 0x22400, 0x0) ** NR
使用例 2 冗長性セットによる特定のインタフェース群の追跡
% apptrace -v localtime,strftime,puts date
-> date     -> libc.so.1:struct tm * localtime(const time_t * = 0x225c0)
        arg0 = (const time_t *) 0x225c0
        return = (struct tm *) 0xff160280 (struct tm) {
        tm_sec: (int) 0x4
        tm_min: (int) 0x34
        tm_hour: (int) 0xa
        tm_mday: (int) 0x1d
        tm_mon: (int) 0xa
        tm_year: (int) 0x68
        tm_wday: (int) 0x1
        tm_yday: (int) 0x14d
        tm_isdst: (int) 0
        }
<- date     -> libc.so.1:localtime() = 0xff160280
-> date     -> libc.so.1:size_t strftime(char * = 0x225c4 "",
                        size_t = 0x400,
                        const char * = 0xfefd3e10 "%a %b %e %T %Z %Y",
                        const struct tm * = 0xffbff99c)
        arg0 = (char *) 0x225c4 ""
        arg1 = (size_t) 0x400
        arg2 = (const char *) 0xfefd3e10 "%a %b %e %T %Z %Y"
        arg3 = (const struct tm *) 0xffbff99c (struct tm) {
        tm_sec: (int) 0x4
        tm_min: (int) 0x34
        tm_hour: (int) 0xa
        tm_mday: (int) 0x1d
        tm_mon: (int) 0xa
        tm_year: (int) 0x68
        tm_wday: (int) 0x1
        tm_yday: (int) 0x14d
        tm_isdst: (int) 0
        }
        return = (size_t) 0x1c
<- date     -> libc.so.1:strftime() = 0x1c
-> date     -> libc.so.1:int puts(const char * = 0x225c4
                        "Mon Nov 29 10:52:04 PST 2004")
        arg0 = (const char *) 0x225c4 "Mon Nov 29 10:52:04 PST 2004"
                        Mon Nov 29 10:52:04 PST 2004
        return = (int) 0x1d
<- date     -> libc.so.1:puts() = 0x1d

** NR - 関数呼び出しの戻り値は追跡できません。

ファイル

apptrace の基本実行時サポートは Solaris 実行時リンカー (ld.so.1(1)) のリンク監査機能によって提供され、apptrace コマンドは、/usr/lib/abi に格納されている監査オブジェクト (apptrace.so.1) に依存してこの機能を使用します。

制限事項

制限事項

一般に、apptrace は、変数引数リストを受け入れる関数への呼び出しを追跡することはできません。一部の特別な場合、特に printf および scanf ファミリでは、この制限事項に対処するために、適切なコーディング方法がいくつか用いられています。

apptrace ユーティリティは、戻り値のタイプが struct または union である関数呼び出しの戻り値を追跡することができません。

スタックを調べようとする関数、または呼び出し元に関する情報を抽出しようとする関数は追跡できません。たとえば、[gs]etcontext()[sig]longjmp()[sig]setjmp()vfork() がこれに相当します。

exit(2) などの値を返さない関数では、戻り値については追跡されません。

セキュリティ上の理由から、適切な特権を持つプロセスだけが apptrace を使用して setuid/setgid プログラムを追跡できます。

<varargs.h> の取り込みを必要とする関数 (vwprintw(3XCURSES)vwscanw(3XCURSES) など) を追跡するときは、引数の出力は書式化されません。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
developer/apptrace (32 ビット)
SUNWcstlx (64 ビット)
インタフェースの安定性
不確実

関連項目

ld.so.1(1), truss(1), vwprintw(3XCURSES), vwscanw(3XCURSES), attributes(5), fnmatch(5)

Oracle Solaris 11.2 リンカーとライブラリガイド