VS Code に PHP Debug 環境を構築したくなった。
はじめに
VS Code に PHP Debug 環境を構築したくなった。
四苦八苦しつつもなんとか環境ができた。
試行錯誤でどのような手順だったかはあいまいだが、うろおぼえの範囲で記録。
難所は pecl で xdebug がビルドできなかったところ。
原因とおもわれるところは
- phpize が OS X もしくは Xcode に既定でインストールされているものが実行されていたこと
- sudo で pecl を起動するとき、環境変数を引き継いで(preserve) していなかったこと
環境
kuwahara-mac:~ mitsuaki$ sw_vers ProductName: Mac OS X ProductVersion: 10.14.1 BuildVersion: 18B75
参考
How to Install XDebug on a new Mac (including Mojave) | Devin Baldwin
手順
xdebug ビルド
# link できないとエラーがでるが、後述の環境変数でフルパスで指定することで回避 $ brew install autoconf $ brew install automake # ソースからビルド(-s)しなくても大丈夫なのかもしれない $ brew install php@7.2 -s # brew でインストールしたpecl を使うために、bin ディレクトリへ移動 $ cd /usr/local/Cellar/php/7.2.12_1/bin $ export PHP_AUTOCONF=/usr/local/Cellar/autoconf/2.69/bin/autoconf $ export PHP_AUTOHEADER=/usr/local/Cellar/autoconf/2.69/bin/autoheader # うえの環境変数を引き継ぐために、-E つきで起動 $ sudo -E ./pecl install xdebug
php.ini
$ head -n 5 /usr/local/etc/php/7.2/php.ini zend_extension="xdebug.so" [XDebug] xdebug.remote_enable = 1 xdebug.remote_autostart = 1
httpd.conf
$ cat /usr/local/etc/httpd/httpd.conf | grep -E '^[^#].*(php|FilesMatch)' LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so <FilesMatch .php$> SetHandler application/x-httpd-php </FilesMatch>
launch.json
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000, "pathMappings": { "/your-webapp-root": "${workspaceRoot}" } } ] }
xdebug ビルドがうまくいっていない例
kuwahara-mac:20181126 mitsuaki$ sudo pecl install xdebug WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update downloading xdebug-2.6.1.tgz ... Starting to download xdebug-2.6.1.tgz (283,961 bytes) ..........................................................done: 283,961 bytes 79 source files, building running: phpize grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/include/php/Zend/zend_modules.h: No such file or directory grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory Configuring for: PHP Api Version: Zend Module Api No: Zend Extension Api No: Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. ERROR: `phpize' failed