WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Xdebugのインストール

      2015/07/23

スタックトレース

英語での表記はStackTrace。

プログラムの実行でエラーが発生したときに例外が発生した箇所や、発生した例外がハンドリングされている過程を履歴として示したもの。
例外の発生地点から、例外がどのクラスのどのメソッドを経由して上がってくるかを把握できるためデバッグ時の有益な情報となる。

Xdebugとは

PHP用のデバッガです。
一般的なデバッガが備えているブレークポイントの設定やスタックトレース表示の拡張などに加え、var_dumpの表示拡張などPHP特有の機能も備えています。

PHPではデファクトのようでIDEがサポートしていたり、VimでXdebugを組み込むためのプラグインがあったりして使いやすいと思います。

Xdebugをインストールする前の確認

1. PHPがデバッグ版ではないこと

Xdebugを使うにはPHP本体がデバッグ版ではない必要があります。
php.iniの設定値を書きコマンドで確認できます。

$ php -i | grep 'Debug Build'
Debug Build => no  この値が"no"ならOK

2. PECLがインストールされていること

ここではXdebugをソースからではなくパッケージでインストールします。
パッケージでのインストールにはPECLが必要になります。

PECLはC言語版のPEARのようなもので、PEARがインストールされていればPECLも使えます。
まだPEARがインストールされていない場合は下記ページを参考にインストールしてください。

PEARのインストール

3. Developer Package がインストールされていること

phpize と php-config もXdebugをインストールする際に必要になるので、これらを含むDeveloper Packageもインストールしておく必要があります。

CentOSなどRedhat系なら”php-devel”、

# yum -y install php-devel

UbuntuなどDeb系なら”php5-dev”をそれぞれインストールします。

$ sudo apt-get install php5-dev

Xdebugのインストール

上記確認して問題なければ下記コマンドでインストールできます。

# pecl install xdebug
〜(略)〜
Build process completed successfully
Installing '/usr/lib/php5/20121212/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.3.2
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=xdebug.so" to php.ini

エクステンションのパス(上記だと'/usr/lib/php5/20121212/xdebug.so')が出力されるのでメモしておきましょう。

Xdebugの有効化

続いてインストールしたXdebugを有効化します。

$ sudo vi /etc/php.ini
下記を追記
zend_extension="/usr/lib/php5/20121212/xdebug.so"↲

; see http://xdebug.org/docs/all_settings
html_errors=on
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

php.iniでXdebugのエントリが表示されれば有効化完了です。

$ php -i | grep xdebug
xdebug
xdebug support => enabled
〜(略)〜

Webサーバのリスタートも行っておきましょう。

$ sudo /etc/init.d/apache2 restart

Xdebugの使い方

var_dump拡張

例としてワンライナーコマンドで見てみます。

Xdebugが有効だとvar_dumpがxdebug_var_dumpでオーバーロードされるので下記のようにvar_dumpのカラーリングや表示項目の調整などが行えます。

$ php \
        -d xdebug.cli_color=1 \
        -d xdebug.var_display_max_data=8 \
        -d xdebug.var_display_max_children=4 \
        -r 'var_dump( "a longer string", array( 1, 2, 3, 4, 5, 6, 7 ) );'

New in Xdebug 2.2: Colours on the command line — Derick Rethans

Vimのプラグインvdebugを利用したデバッグ

Xdebugは基本的には上記のようなCLIそれ単体で使われるケースは少なく、IDEやVimなどのプラグインと組み合わせて使われることが多いようです。

ここではVimのプラグインであるvdebugの使用方法を見ていきます。
時間がないのであとでまとめます。vdebugと連動したchrome-extensionのXdebug-helperというのがありますが、下記URLが詳しいです。

http://qiita.com/ryurock/items/28e3499e539662c6c40a

 - PHP , , , , ,