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 の # をはずす
のを忘れずに

Leave a Reply