それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

php xdebug の接続(localhost/phpstorm/php-builtin webserver)

IDEphp-xdebugブレークポイントを使いたい。

IDEphp-debug を使ってブレークポイントを設定し任意の場所で変数の内容をダンプしたい。

はじめに

phpxdebug を使えば phpstorm や vscode などでブレークポイントを使うことができる。

接続形態

xdebugphp のプロセスは、次のような(ちょっと特殊?)接続の形態をとる。

phpstorm ( IDE/debugger )  127.0.0.0:9000   <----connect --- phpサーバー

ここでは、矢印が右から左につながっていることがポイント。

PHPのランタイム(インタプリタ)がソースコードの実行時に、phpstorm(IDE)に接続することでデバッグ機構が動作する。

手順の概要(やること)

全体の流れは、こんな感じになる。

ここでの、ポイント

  • IDEがポートをリッスンして待ち受ける
  • PHPが実行時にXdebug経由で、IDEのポートへ接続する

接続がポイントになります。「IDEがポートをリッスンして待ち受ける」ということを忘れないでください。

builtin-sever と phpstorm の接続

phpにバンドルされている builtin-web-server  とphpstorm を接続する。

ここでやること

  • builtin-web-server   を xdebug 有効で起動する。
  • phpstorm がxdebug を待ち受ける。
  • ブラウザで起動した builtin-web-server に接続する。
  • ビルトインWebServerを起動する -ビルトインWebServerでphpのWEBアプリケーションを動かす。

builtin-web-server  を起動して動作チェック。

最初に、空っぽのPHPプロジェクトを作っておく

f:id:takuya_1st:20201215001225p:plain

プロジェクト内に、コンテンツを作る。

f:id:takuya_1st:20201215001229p:plain

ビルトインWebServerをxdebug 付きで起動して、動作チェックする。

php -S 127.0.0.1:8000 -t public

起動した。

f:id:takuya_1st:20201215001236p:plain

ブラウザで接続して起動をチェックする

f:id:takuya_1st:20201215001232p:plain

ビルトインWebServerが動いたたら、今度はXdebugを有効にして起動する。

これで、Xdebugが有効になって起動する。

php -d xdebug.remote_autostart=1 \ 
-d xdebug.remote_enable=1 \ 
-d xdebug.remote_host=127.0.0.1 \ 
-d xdebug.remote_port=9000 \ 
-d xdebug.remote_connect_back=1 \ 
-d xdebug.remote_log=/tmp/xdebug.log \ 
\ 
-S 127.0.0.1:8000 \ 
-t public

もちろん、php-xdebug がインストールされている必要があるので、インストールされていない場合は、 有効にしておく。 例は、WSL1  のdebian/ubuntu です。

sudo apt install php-xdebug
sudo phpenmod xdebug

phpstorm でXdebugの接続を受け入れる

右上のボタンを押して、ポートをリッスンして受け入れる。

初期状態

f:id:takuya_1st:20201215001240p:plain

リッスン中

f:id:takuya_1st:20201215001244p:plain

リッスンしたらブラウザからアクセス。

ブラウザから、ビルトインWebServerにアクセス

f:id:takuya_1st:20201215001251p:plain

すると、ビルトインWebServerのXdebugが、PHPStormに接続に行く。

PHPStormがこの接続を受け入れるか聞いてくる。Acceptすると接続され、許可設定が記憶される。

f:id:takuya_1st:20201215001247p:plain

ブレークポイントを設定する。

php側にブレークポイントを設定しておく。

f:id:takuya_1st:20201215001254p:plain

再度、ブラウザで開く。すると実行は一旦停止される。

phpstorm がアクティブになり、ブレークポイントで止まっていることがわかる。

f:id:takuya_1st:20201215001259p:plain

ブレークポイントをResume(再開)してあげる

f:id:takuya_1st:20201215001304p:plain

最後まで実行されると、ブラウザに結果が表示される。

f:id:takuya_1st:20201215001308p:plain

Xdebugって超簡単に接続できます。

他の言語のデバッガと大きく異る。

phpXdebugはちょっと癖があります。他の言語がSSH経由でサーバーとして起動中のプロセスにアタッチするのにたいし、PHP-Xdebug はサーバーがIDEへアタッチしてきます。理屈がわかればかんたんです。

今回のポイント

xdebugリモートデバッグではXdebugがIDEへ接続へ行く

使うにはXdebugがロードされる環境であればいい、サーバーはApacheでもビルトインWebServerでもphp-fpm でも php-cgi でもなんでもいい。IDEはリッスンが必須。。VisualStudio CodeでもPHPStormでもなんでもいい

次は、Laravelの起動とLaravelからのXdebugです。

Laravelのartisan serve は、その内部でシェル 経由でビルトインWebServerを起動するため、少し挙動が異なります。注意が必要です。