PhpStorm で、Xdebugのリモートデバッグ環境を作る

PhpStorm で、Xdebugのリモートデバッグ環境を作る

今日はなんといえばいいのか、第三世代iPadはなかったことになってるみたいなので、気分が沈んでいるtanakaです。でも!Kindle がついに日本にやってくるということで楽しみです。狙い目はKindle Paperwhite 3Gです。

さて、話は変わります。有償ですがオススメのIDE PhpStormの話をします。恥ずかしながら今までXdebugのリモートデバッグ機能を使えていませんでした。が、ついに、ついに設定できたのでその使い方をまとめます。環境はPhpStorm 5.0 (Mac OS X 10.8.2), PHP/ApacheはMacPortsでインストールしています。

リモートデバッグで何ができる?

処理を特定の行で中断させて、変数を中身をチェックできる

20121025tanaka_xdebug01.png

上の図は、あるCakePHPのコントローラの中で処理を中断して、変数の中身を見た時の図です。 真ん中の段で、コントローラのメソッド内ローカル変数、インスタンス変数、スーパーグローバル変数などを見ることができます。

処理を中断させたときの関数・メソッドのコールスタック(呼び出しの履歴)を確認できる

上の図で左側にファイル名:行数 って感じで表示されているのがPHPのコールスタックです。ソースコードの規模が大きいアプリだと、サブルーチンの呼び出しの入れ子が増えますので、こういうのがあるとありがたいですね。xdebug とtrigger_errorなどを組み合わせてもできるはできますが、PHPのコードを書くのに比べればワンクリックで設定でき、処理の再開もできます。

処理を停止させてから1行ずつ実行できたりする(ステップ実行)

上の図の、上部5つほど並んでいるボタンが、その機能です。1行ずつPHPの命令を実行したり、メソッドの中に入ったり、プログラムを少しずつ実行できます。また、右側で変数を登録しておくと、ステップ実行中の変数について確認できます。

ほかにも条件付きブレークポイントやブレークせずにログを残す機能もありますが、それは置いといて設定方法について解説しましょう。

PhpStorm のXdebug設定、そしてデバッグ開始

MacPorts を使った場合にXdebugでリモートデバッグを行うときの設定は以下の記事がとても参考になります。

記事中にある


xdebug.remote_connect_back=1

は、Xdebug 2.1から追加された設定でxdebug.remote_hostをコメントアウトして、この設定を追加すると、複数のリモートデバッグ環境に対応できるとのこと。社内ネットワークでWebサーバーに外部からはアクセスできない場合は設定しても問題ないでしょう。

PhpStormの設定については、ポートだけ確認すれば問題ないと思います。設定画面の以下の項目をチェックしてください。

20121025tanaka_xdebug02.png

設定が終わったら、ウインドウ上部にあるボタンを押します。IDE側マシンの9000番ポートを開いて、Webサーバー側からデバッグ情報がくるのを待ち受ける状態になります。

20121025tanaka_xdebug03.png

この状態で、PhpStormでプロジェクトを開いているPHPアプリのページをブラウザで開くと、自動的にPhpStormが全面に表示されて、次のようなエラーが表示されてしまいました。

20121025tanaka_xdebug04.png

エディタ領域では、pear-ini.php が勝手に開いていました。どうやら、プロジェクトフォルダの外部のスクリプトが実行されるとデバッグが中断してしまうようです。プロジェクトの外部ライブラリにこのスクリプトを追加してしまいましょう。(作業コピーには影響ありません。)左側のプロジェクトエクスプローラの一番下にあるExternal Librariesを右クリックしてConfigure PHP Include Paths... を選択します。Include path の「+」→Specify Otherを選択し、表示されたエラーに従って、「/opt/local/var/db/php54/pear」を追加しましょう。OKを押して、ウインドウを閉じます。

エディタにて行数の右側をクリックすると赤丸のマークが表示されます。

20121025tanaka_xdebug05.png

これがブレークポイントで、処理がこの行に到達すると中断(ブレーク)して、変数の状態をチェックできます。実際にブレークすると次のように表示されます。

20121025tanaka_xdebug06.png

ブレーク時点でのコールスタックや変数の情報が表示されました。

まとめ

Xdebugでリモートデバッグできるようになると、デバッグでコードを埋め込まなくてもよくなって、楽できるんじゃないかと思います。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ