intel Mac mini に、PHP のプログラムのプロファイリング用に、Xdebug と Kcachegrind をインストールした
自作プログラムのプロファイリングをしたかったので、開発用の intel 版 Mac mini(OSX 10.4.8)に Kcachegrind を入れてみました。
ウェブで探すと、Windows にインストールしたという事例は結構あったけど、マックに入れた話は日本語ではほとんどひっかから ない。
このあたりを参考にしました。
Remote PHP Debugging on Intel-based Macs with Komodo
Running Kcachegrind on Mac OSX 10.4
Komodo and PHP on OS X: a step-by-step guide
このプレゼン資料らしきものも、役に立ちました。
XDebug Presentation PDF
まず OS X の開発環境 Xcode を、OS のインストール CD からインストールしました。これがないと Xdebug やらがコンパイルできません。
Xdebug は CVS から落としました。
cvs -d :pserver:srmread@cvs.xdebug.org:/repository login
CVS password: srmread
cvs -d :pserver:srmread@cvs.xdebug.org:/repository co xdebug
適当なディレクトリに展開して、そのディレクトリで
phpize
./configure --enable-xdebug
make
su make install
デフォルトで /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so にインストールされるので
php.ini に以下を追加。
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.default_enable = On
xdebug.manual_url = "http://uk.php.net"
xdebug.show_local_vars = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "/Users/tak/development/xdebug_profiler"
xdebug.profiler_output_name = "script"
再起動すると Xdebug が組み込まれるはずなのですが、ここで問題が。
先にあげたリンクの Komodo and PHP on OS X: a step-by-step guide でも指摘されていたのですが、デフォルトで OS X に入っている PHP では動かないらしい。
PHP 5.2.0 for Apache 1.3(php.net半公認だそうだ)からバイナリ取ってきて、インストールしました。PHP5 になっちゃったけど、自作プログラムはもともと5で開発していたので大丈夫、と思ってたら表示が崩れてちょっとびびりました。結局プログラムのなかに<?phpじゃなく<?で始まっているものが(終了の?>も入ってなかった。終了タグは実はなくても大丈夫)あって、これが short_open_tag の設定にひっかかってただけでした。
PHP5 がデフォルトで使われるように
/etc/profile を編集。
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/php5/bin"
更にもともとインストールされている PHP をリネーム。
sudo bash
cd /usr/bin
mv php php-old
mv php-config php-config-old
mv phpize phpize-old
一度ターミナルを出て再度入り直します。Xdebug をコンパイル、php.ini を編集して apache を再起動して、phpinfo を見てみると無事に Xdebug 読み込まれています。エラー表示がわかりやすくなって、Xdebug だけでも入れた価値あります。なにせさっきの short_open_tag にからんだバグさっそく一発で発見できました。
Kcachegrind をコンパイルするには X11SDK が必要ですが、これはさっき Xcode をインストールした時に入っています。当然X11 も必要なので CD の Optional Installs.mpkg からインストールしておきます。
Kcachegrind は fink でインストールしました。
fink 本体は
Fink のダウンロード
からバイナリでインストール。
Kcachegrind は unstable に入っているので /sw/etc/fink.conf を編集
unstable/main and unstable/crypto
を Trees に追加
fink selfupdate; fink index; fink scanpackages
sudo fink install kcachegrind
これでおしまい、ここからはマシンまかせなんですが、実はインストール終わるまで、一晩かかります。KDE 本体の殆どをコンパイルする必要があり、130ぐらい依存関係のあるパッケージが、ずらずらと一緒にインストールされるためです。とりあえず寝ました。
翌朝起きてみると、やっほーうまくいってました。しかし、この一連のインストール作業で50GBあったハードディスクの空き容量が半分の25GBに…更にターミナルから startx して、出てくるターミナルから更に kcahegrind をコマンドを打ってやらないと、起動しないです。こんなもんなのか。ここらへんは宿題です。
追記
必要があって PHP4 に戻すときには
/private/etc/httpd/users/+entropy-php.conf がリンクしている /usr/local/php5/entropy-php.conf を一時的に空に
/etc/httpd/httpd.conf の php4 の # をはずす
のを忘れずに