PHPをデバックするためにコンパイルする


ctags で PHP の src用タグファイルを作ってみる - ”たゆたえども沈まず”でPHP のコードを読めるようにしましたが、その後デバックもしたくなったため phpコマンドをデバックできるようにしてみました。
自分の環境は Mac Book AirOS X 10.8.3 です。コンパイルのための gccxcode 経由でインストール済です。インストールされてない方はhttp://memo.yomukaku.net/entries/UaLbzhEを参考にインストールしてみてください。

srcの取得

PHP のコードをダウンロードしました。自分が使っている PHP は 5.2.14 です。

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デバックできるようになりました。気になる動きがあったらガンガンデバックしてみたいと思います。