VS Code に PHP Debug 環境を構築したくなった。

はじめに

VS CodePHP Debug 環境を構築したくなった。
四苦八苦しつつもなんとか環境ができた。
試行錯誤でどのような手順だったかはあいまいだが、うろおぼえの範囲で記録。

難所は peclxdebug がビルドできなかったところ。
原因とおもわれるところは

  1. phpizeOS X もしくは Xcode に既定でインストールされているものが実行されていたこと
  2. 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