PHPをデバックするためにコンパイルする
ctags で PHP の src用タグファイルを作ってみる - ”たゆたえども沈まず”で で PHP のコードを読めるようにしましたが、その後デバックもしたくなったため phpコマンドをデバックできるようにしてみました。
自分の環境は Mac Book Air の OS X 10.8.3 です。コンパイルのための gcc は xcode 経由でインストール済です。インストールされてない方はhttp://memo.yomukaku.net/entries/UaLbzhEを参考にインストールしてみてください。
srcの取得
phpコマンドのコンパイル
ダウンロードした tar.gz ファイルを解凍してコンパイルをおこないます。make の実行が終わると、phpコマンドができています。configure で --prefix を指定しているのは、デフォルトのパスで make install が実行されるのを避けるためです。デフォルトでは /usr/local となっているため、環境を汚さないために home配下のディレクトリを指定しました。
tar zxvf php-5.2.14.tar.gz cd php-5.2.14/ ./configure --prefix=~/opt/ make ls sapi/cli/php
phpコマンドの printデバック
phpコマンドが作成できるようになりましたので、printデバックしてみたいと思います。今回は crc32 という PHP の関数を使って試します。ext/standard/crc32.c が crc32 関数の実装部分であるため、こちらに printf を仕込みます。仕込んだ後は該当のファイルをコンパイルして phpコマンドを作成しなおします。コンパイル実行のために .o .lo ファイル、phpコマンドを削除します。その後 make を実行します。
sapi/cli/php -r 'echo crc32(1)."\n";' vim ext/standard/crc32.c # rm -v sapi/cli/php ext/standard/crc32.lo ext/standard/crc32. make sapi/cli/php -r 'echo crc32(1)."\n";'
これで心置きなく PHP を printデバックできるようになりました。気になる動きがあったらガンガンデバックしてみたいと思います。