2019/07/13(土)Cygwin php + PhpStorm Xdebug で、PHPなWebアプリをブレークポイント仕掛けてデバッグする
忘れる前にメモ。
まだcygwinなんか使ってるの? WSLにしたら? という心の声も聞こえるが、 postgresもphpも入れるだけで動くし慣れ親しんでいるのもあって、開発環境としては手軽なので。でも、vagrantやdockerが手軽に使えるようになってきて、世の中の人からみたらきっと少数派になりつつあるのだろう。
Cygwin に postgres 入れて、 php アプリの開発環境にしている。
$ php -S localhost:8000
で動く built-in server で、xdebug で PhpStorm から ブレークポイントしたい話。
XdebugのPre-built なバイナリは、PHP公式ビルド向けしかない。
急がば回れ。 PHP公式ビルド入れるかで入れた。ら、pdo_pgsql を有効にするとセグる。うーん、よくわかんない。
急がば回れ。その2。Xdebugソースからcygwin用にソースからビルドすればいいんじゃね?
https://github.com/xdebug/xdebug から、clone して、readmeのとおりに rebuild.sh すると、コンパイルエラーで止まる。ググると、 https://stackoverflow.com/questions/29752441/mac-xdebug-make-warning-incompatible-pointer-types-initializing-jmp-buf-ak が引っかかったので、
#ifdef HAVE_SIGSETJMP
# define SETJMP(a) sigsetjmp(a, 0)
# define LONGJMP(a,b) siglongjmp(a, b)
# define JMP_BUF sigjmp_buf
#else
# define SETJMP(a) setjmp(a)
# define LONGJMP(a,b) longjmp(a, b)
# define JMP_BUF jmp_buf
#endif
を、 xdebug_handler_dbgp.c の上の方に書いて、1032行目を
JMP_BUF *original_bailout = EG(bailout);
にしたら、makeできた。make installした。
cygwin の php は、 /etc/php.d/ の下にある ini を読んでくれるので、
/etc/php.d/xdebug.ini
を作って、
[Xdebug]
zend_extension="xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
と書いたら、phpinfo に xdebug 出てきた。
後は、PhpStorm のマニュアル https://pleiades.io/help/phpstorm/creating-php-web-application-debug-configuration.html に書いてあるとおりに進めたら、なんかデバッグブレークできた。
めでたしめでたし。