PhpStormとXdebug3でCodeIgniter4をステップ実行する

この記事は CodeIgniter Advent Calendar 2020 - Qiita の24日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

この Advent Calendar もついに24日。ここ日本でも多くの人がクリスマスミサで以下のような聖書の言葉を聞くことでしょう。

Luke 2:8 - 2:12

And there were shepherds living out in the fields nearby, keeping watch over their flocks at night. An angel of the Lord appeared to them, and the glory of the Lord shone around them, and they were terrified.

But the angel said to them, “Do not be afraid. I bring you good news that will cause great joy for all the people. Today in the town of David a Savior has been born to you; he is the Messiah, the Lord. This will be a sign to you: You will find a baby wrapped in cloths and lying in a manger.”

なぜ、天使はこのような大きなニュースを羊飼いに伝えたのでしょうか?なぜ、救い主は飼い葉桶の中なのでしょうか?謎が謎を呼びます。

それはさておき、今日は Xdebug3 でステップ実行してみたいと思います。

動作確認環境

  • PhpStorm 2020.3
  • Xdebug 3.0.1
  • PHP 7.4.13
  • macOS 10.15.7

Xdebug のインストール&設定

pecl から xdebug をインストールします。

$ pecl install xdebug

php.ini の場所を確認します。

$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini

php.ini に Xdebug の設定を追加します。

$ vi /usr/local/etc/php/7.4/php.ini

zend_extension を以下のようにフルパス変更します。

zend_extension="/usr/local/Cellar/php@7.4/7.4.13_1/pecl/20190902/xdebug.so"

以下を追加します。

[xdebug]
xdebug.mode = develop,debug
;xdebug.client_host = localhost
;xdebug.client_port = 9003
xdebug.idekey = PHPSTORM
;xdebug.start_with_request = yes

Xdebug が有効になっていることを確認します。

$ php -v
PHP 7.4.13 (cli) (built: Nov 30 2020 14:46:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v3.0.1, Copyright (c) 2002-2020, by Derick Rethans
    with Zend OPcache v7.4.13, Copyright (c), by Zend Technologies

PhpStorm の設定

Preferences の Languages & Frameworks > PHP > Debug を以下のように変更します。

Run メニューから Edit Configurations を開き、Templates の PHP Remote Debug から以下の設定を作成します。

IDE key を PHPSTORM に設定します。

Chrome の設定

https://chrome.google.com/extensions/detail/eadndfjplgieldjbigjakmdgkmoaaaoc から Xdebug Helper をインストールします。

Firefox、Safari の場合は、Browser debugging extensions—PhpStorm を参照してください。

Xdebug Helper を設定します。

http://localhost:8080/ 以下のみを許可します。

IDE key を PhpStorm に設定します。

ビルトインサーバの起動

php spark serve を実行してビルトインサーバを起動します。

PhpStorm でのデバッグ開始

以下のアイコンを押します。

アイコンが以下のように変わります。

Chrome でのデバッグ開始

Xdebug Heler を Debug に設定します。

PhpStorm でのステップ実行

Chrome からアクセスすれば、以下のように最初の行で実行が止まります。

ステップ実行の操作

このアイコン(Resume)を押すと、プログラムの実行が再開します。

このアイコン(Stop)を押すと、停止します。

このアイコン(Step Over)を押すと、次の文に進みます。メソッドが呼び出されても、メソッドの中には入って行きません。

このアイコン(Step Into)を押すと、次の文に進みます。メソッドが呼び出される場合、メソッドの中には入って行きます。

このアイコン(Force Step Into) ですが、Step Into との違いはよくわかりません。

このアイコン(Step Out)を押すと、現在のメソッドの1つ外まで進みます。

このアイコン(Run to Cursor)を押すと、カーソルの位置まで実行されます。

ブレークポイントの設定

index.php の最初の文にブレークポイントを設定し、ブレークポイントまで進めます。

ブレークポイントについては、以下を参照してください。

ブレークポイントで止まりました。

スタックトレースや変数がわかります。

Home コントローラにブレークポイントを設定し、そこまで進めます。

以下の流れで Home::index() にたどり着いていることがわかります。

Home.php:9, App\Controllers\Home->index()
CodeIgniter.php:931, CodeIgniter\CodeIgniter->runController()
CodeIgniter.php:427, CodeIgniter\CodeIgniter->handleRequest()
CodeIgniter.php:333, CodeIgniter\CodeIgniter->run()
index.php:44, require_once()
rewrite.php:45, {main}()

この記事は CodeIgniter Advent Calendar 2020 - Qiita の24日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

参考

Date: 2020/12/24

Tags: codeigniter, codeigniter4, phpstorm, xdebug, debug