Help us understand the problem. What is going on with this article?

ゲストOSで実行するphpunitのテストコードをPhpStormでブレークポイント設定する

More than 5 years have passed since last update.

本投稿で対象となる環境は、ホストOSのPhpStormでテストコードを書き、それらのコードをVagrantのvm.synced_folderでマウントして、ゲストOSでphpunitを実行しているような環境です。

テストコードでError、Faultになったとき、デバッグの一手段としてブレークポイント設定ができると作業が捗ります。

本投稿のIPアドレスとポートは以下の通り。

ホストOSのIPアドレス 192.168.33.1
ゲストOSのIPアドレス 192.168.33.30
xdebugのポート 9000

PhpStormのPHP Servers設定

PhpStorm PreferenceのServersを追加します。

設定画面

kobito.1407665573.276452.png

設定値は

Name laravel_server_name (任意) ← phpunitを実行するときに利用する
Host 192.168.33.30
Port 9000
Debugger Xdebug
Use path mappings チェックする

パスのマッピング

また、上記設定画面でテストコードのパスマッピングを設定します。ホストOSのファイル毎にゲストOSの絶対パスを設定できます。ブレークポイントを設定したいコードはゲストOSの絶対パスを設定してください。

上記画面ではPhpStormプロジェクト(ホストOS)の app/tests/ExampleTest.php をゲストOSの絶対パス /vagrant/laravel/app/tests/ExampleTest.php に設定しています。
ExampleTest.phpはlaravelに含まれているサンプルのテストコードです。

PhpStormのPHP Debug設定

PhpStorm PreferenceのDebugでxdebugの設定を行います。

設定画面

kobito.1407668027.932548.png

Xdebugの設定値

Debug port 9000
Can accept external connections チェックする
Force break at the first line when no path mapping spceified 任意
Force break at the first line when a script is outside the project 任意

PhpStormのブレークポイント設定

メニュー「Run」「Toggle Line Breakpoint」でブレークポイント設定をできます。またエディタの左端をクリックすることで切り替えることも可能です。ブレークポイントを設定するファイルは必ずパスのマッピングを行っておいてください。

kobito.1407671470.163906.png

phpunitの実行

PhpStormを接続待ち状態に変更する

メニュー「Run」「Start Listen for PHP Debug Connections」でxdebugの接続待ち状態になります。

ゲストOSのターミナルでphpunitを実行する

$ XDEBUG_CONFIG="on" PHP_IDE_CONFIG="serverName=laravel_server_name" phpunit

XDEBUG_CONFIGは何でも良いので値をセットするとxdebugの接続を行うようです。
PHP_IDE_CONFIGが重要で、本投稿ではserverName=laravel_server_nameと設定していますが、このlaravel_server_nameは先ほどPhpStormのPHP Serversで設定したNameの値です。

xdebugの接続が正常に行われ、ブレークポイントを設定したパスのマッピングが問題なければ、次の画面のようにPhpStormでブレークしているはずです。
ステップ実行やスーパーグローバル・ローカル変数の書換が可能です。

kobito.1407671409.530058.png

ゲストOSのxdebug設定

おまけです。
php.iniに設定しているxdebugの設定値です。

xdebug.collect_params = 4
xdebug.dump.GET = "*"
xdebug.dump.POST = "*"
xdebug.remote_enable = 1
xdebug.remote_host = "192.168.33.1"
pakiln
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした