アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

関数のデバッグトレーサー - PHP_FunctionCallTracer

皆さんはPHP_FunctionCallTracerというPEARライブラリをご存知でしょうか?
私は先日1.0.0RC1のリリース情報を見て初めて知ったのですが、これは関数のデバッグトレースを行うためのライブラリで、トレース結果を表示したり、ファイルへ書き出したりすることができます。

まずは、PEARコマンドを使ってインストールします。この際、まだ正式リリースではありませんので、「-beta」を付けます。

※13日に1.0.0がリリースされましたので、「-beta」は付けなくても大丈夫です(2007年9月18日追記)



# pear install PHP_FunctionCallTracer-beta


次に、下記の内容のexample.phpを作成します。



<?php
require_once 'PHP/FunctionCallTracer.php';

function example($before)
{
  PHP_FunctionCallTracer::traceArguments();

  $after = strtoupper($before);
  PHP_FunctionCallTracer::traceVariables($after);

  PHP_FunctionCallTracer::traceReturn($after);
  return $after;
}

example('hoge');
PHP_FunctionCallTracer::putTrace();
?>


それでは、早速実行してみます。



$ php example.php
Array
(
  [php_uname] => Linux localhost.localdomain 2.6.18-8.1.8.el5 #1 SMP Tue Jul 10 07:06:45 EDT 2007 x86_64
  [date] => Wed, 12 Sep 2007 14:02:14 UTC
  [calls] => Array
    (
      [0] => Array
        (
          [call] => Array
            (
              [file] => /path/to/example.php
              [line] => 15
              [function] => example
            )

          [in] => Array
            (
              [file] => /path/to/example.php
              [line] => 6
              [args] => Array
                (
                  [0] => hoge
                )
            )

          [watches] => Array
            (
              [0] => Array
                (
                  [file] => /path/to/example.php
                  [line] => 9
                  [args] => Array
                    (
                      [0] => HOGE
                    )
                )
            )

          [out] => Array
            (
              [file] => /path/to/example.php
              [line] => 11
              [args] => Array
                (
                  [0] => HOGE
                )
            )
        )
    )
)


関数の引数や戻り値、指定した変数などがスクリプト名やその行番号と共に表示されているのが見て取れます。それぞれ

・traceArguments() … [call],[in]
・traceVariables() … [watches]
・traceReturn() … [out]

といったように対応しているようです。

また、putTrace()は



PHP_FunctionCallTracer::putTrace("/path/to/filename");


のようにファイル名を指定することで、ファイルへ出力することもできます。

PHP_FunctionCallTracerは他のPHP用デバッガの置き換えを目指したものではないとのことで、高機能というわけではありませんが、リモートデバッグ時に複雑な関数呼び出しの動作をトレースする際は便利かも知れませんね。