PhpStormでデバッグしてみる

CakePHP3をインストールしてみる
の続き

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」をブックマークバー等に保存する。


デバッグの実施

とりあえず、適当にブレークポイントを設定しておく。

[Run]-[Debug]を選択し、

今回追加したリモートデバッグを選択すると、

デバッガが起動する。

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

ブレークポイントで止まる。