PhpStormでデバッグしてみる
PhpStormでデバッグしてみる。
PhpStormの設定
前回作成したCakePHP3のsampleをPhpStormで開く。
[PhpStorm]-[Preferences]で設定画面を開き、
サーバーを追加する。 サーバー名/サーバーのIPアドレスを入力し、パスマッピングの設定をする。
[Run]-[Edit Configurations]を開き、
リモートデバッグの設定を追加する。
「PHP Remote Debug」を追加して、先ほど追加したサーバーを指定し、 Ide keyに適当なIDを設定する。
Xdebugの設定
Xdebugをインストールし、
$ sudo yum install php-xdebug
下記の行を追加する。
$ sudo vi /etc/php.d/xdebug.ini
・・・ xdebug.remote_enable=1 xdebug.remote_connect_back=1
再起動して反映。
$ sudo systemctl restart httpd
ブックマークレットの準備
下記のページに行って、
Xdebug & Zend Debugger bookmarklets generator for PhpStorm https://www.jetbrains.com/phpstorm/marklets/
[GENERATE]ボタンを押して、
「Start debugger」「Stop debugger」をブックマークバー等に保存する。
デバッグの実施
とりあえず、適当にブレークポイントを設定しておく。
今回追加したリモートデバッグを選択すると、
http://localhost:8080/sample/にアクセスし、「Start debugger」を押してデバッグを開始する。
リロードして、改めてアクセスすると、ブレークポイントで止まる。
ちなみに、「Start debugger」を押すと、Cookieに、「XDEBUG_SESSION」が保存され、 「Stop debugger」を押すと削除される。
常にデバッグしたい場合
ブックマークレットで切り替えず、常にStart debuggerした状態にしたい場合、
xdebugの設定で、remote_autostartをONにして、idekeyを設定する。
$ sudo vi /etc/php.d/xdebug.ini
・・・ xdebug.remote_enable=1 xdebug.remote_connect_back=1 xdebug.remote_autostart=1 xdebug.idekey='PHPSTORM'
以上で、Star debuggerを押していなくても、デバッガが起動していれば ブレークポイントで止まる。
CLIをデバッグしたい場合
remote_connect_backは$_SERVER['REMOTE_ADDR']でブラウザからのアクセス元のIPを取得しているみたいだが、 CLIの場合は取得できないので、ホストOSのIPアドレスを指定する必要がある。
下記のような感じで、xdebugの設定にホストOSのIPアドレスを指定すれば、 ブラウザからもCLIからでもデバッグできる。
$ sudo vi /etc/php.d/xdebug.ini
・・・ xdebug.remote_enable=1 xdebug.remote_host='10.0.2.2' xdebug.remote_autostart=1 xdebug.idekey='PHPSTORM'
適当なPHPを作成して、
cd /vagrant/sample
vi test.php <?php $a = 'Hello'; $b = 'world!'; echo $a + ' ' + $b;
ブレークポイントを設定する。
実行すると
$ php test.php
ブレークポイントで止まる。