2007/09/12 カテゴリ : Tech  PHP  PEAR 

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

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

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

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

  1. # pear install PHP_FunctionCallTracer-beta

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

  1. <?php
  2. require_once 'PHP/FunctionCallTracer.php';
  3.  
  4. function example($before)
  5. {
  6.   PHP_FunctionCallTracer::traceArguments();
  7.  
  8.   $after = strtoupper($before);
  9.   PHP_FunctionCallTracer::traceVariables($after);
  10.  
  11.   PHP_FunctionCallTracer::traceReturn($after);
  12.   return $after;
  13. }
  14.  
  15. example('hoge');
  16. PHP_FunctionCallTracer::putTrace();
  17. ?>

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

  1. $ php example.php
  2. Array
  3. (
  4.   [php_uname] => Linux localhost.localdomain 2.6.18-8.1.8.el5 #1 SMP Tue Jul 10 07:06:45 EDT 2007 x86_64
  5.   [date] => Wed, 12 Sep 2007 14:02:14 UTC
  6.   [calls] => Array
  7.     (
  8.       [0] => Array
  9.         (
  10.           [call] => Array
  11.             (
  12.               [file] => /path/to/example.php
  13.               [line] => 15
  14.               [function] => example
  15.             )
  16.           [in] => Array
  17.             (
  18.               [file] => /path/to/example.php
  19.               [line] => 6
  20.               [args] => Array
  21.                 (
  22.                   [0] => hoge
  23.                 )
  24.             )
  25.           [watches] => Array
  26.             (
  27.               [0] => Array
  28.                 (
  29.                   [file] => /path/to/example.php
  30.                   [line] => 9
  31.                   [args] => Array
  32.                     (
  33.                       [0] => HOGE
  34.                     )
  35.                 )
  36.             )
  37.           [out] => Array
  38.             (
  39.               [file] => /path/to/example.php
  40.               [line] => 11
  41.               [args] => Array
  42.                 (
  43.                   [0] => HOGE
  44.                 )
  45.             )
  46.         )
  47.     )
  48. )

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

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

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

また、putTrace()は

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

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

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

トラックバックURI

最近の記事

アシアルPHP書籍情報