プログラミングインタフェース

apptrace の実行

apptrace を実行するとき、トレースするアプリケーションは何も変更する必要がありません。apptrace を使用するには、まず apptrace を入力し、次に希望のオプションを入力、最後に対象となるアプリケーションを実行するコマンド行に入力します。apptrace は実行時リンカーのリンク監査機能を使用して、アプリケーションによる Solaris ライブラリインタフェースへの呼び出しを遮断します。次に、apptrace は呼び出しをトレースして、呼び出しの引数と戻り値についての名前と値を出力します。トレースは単一の行に出力することも、読みやすさのために複数の行に分けて出力することも可能です。公開インタフェースは人が読める形式で出力されます。非公開インタフェースは 16 進数で出力されます。

apptrace は、個々のインタフェースとライブラリの両方のレベルで、トレースする呼び出しを選択できます。たとえば、apptracelibnsl から printf() への呼び出しをトレースできるし、特定のライブラリ内にあるすべての printf() 呼び出しをトレースすることもできます。apptrace はまた、ユーザーが指定した呼び出しを詳細にもトレースできます。apptrace の動作を規定する仕様は、truss(1) の使用方法と整合性がある構文によって規定されます。-f オプションを指定すると、apptrace はフォークされた子プロセスもトレースします。-o オプションを指定すると、apptrace-o に指定されたファイルに結果を出力します。

apptrace がトレースするのはライブラリレベルの呼び出しだけであり、また、実行中のアプリケーションのプロセスにロードされるので、truss よりも性能が上がります。しかし、printf は例外ですが apptrace は可変引数リストを受け入れたり、スタックなどの呼び出し側の情報を調査したりする関数への呼び出しをトレースできません (たとえば、setcontext getcontextsetjmplongjmp、および vfork)。