VSCodeでリモートでPHP Debugをブレークできないのをできるようにした。 [プログラミング]
Visual Studio Codeを使って、リモートでXdebugを使うというなんともうれしい機能があったけど、ブレークポイントで止まらずハマったという話。他のサイトでスクリーンショットを使ったりして手取り足取り教えてくれているのであえてここでは、自分のVirtualBoxにつなぐ環境でこうしたら上手くいったという報告のみで。
ステップ実行できるところまではわりとすぐにいったんだけど、ブレークポイントで止まらない止まらないw。実際ググるとブレークポイントで止まらない系の記事が結構あって、そこを見たけどみんな環境が違うから設定ファイルの書いてあることがかなり違うんですよね。PHPだけじゃなくPythonとかその他の言語でもブレークポイントで止まらないとの話があって、これはVSCodeの共通の問題点なんじゃないかと。
とりあえず環境を書いておきますね。
サーバ:VirtualBox上のCentOS7
webサーバ:Apache
クライアント・ホストOS:Windows10
あとの細かいバージョンやら状況は忘れた。特定のバージョンの記事を書いているつもりはないけど、新しくなったら設定方法とかすぐに変わるからなOSSは。
Xdebugを入れるのはPECLで入れました。仕事だとソースから入れて塩漬けできるようにした方がいいんだけど、面倒なので
で入れました。
peclが入っていないときはyumで入れる。
なんというか、Ubuntuはわりとsudoでやる文化があるのですが、RedHat系はsuでrootにならないといけないサンプルが多くて、複数行をコマンドをそのまま貼り付けて実行できないんすよね。#マークが行頭にくっついてきて、率直に面倒くさい。Debian系が好きなんだけども、yumがapt並みにはなっているので大体問題ない。
それとよくMacのローカルでMAMPとかでやっているのを見ましたけど、あれはリモートにつないでないので微妙に参考にならなかったりしました。LinuxとMacという違いもあることですし。とはいえ、最大公約数的な設定の重なりは見られたので良かったのかもなと思ったり。
あと先に言ったようにPHPに限らずブレークポイントで止まらないという記事が割とあったので、いろいろな問題だけど基本的な設定で不具合が出ているのかなと感じました。まぁIDEで提供されている機能をいちエディタがやろうとしているのだから無理が来ても仕方がないかも。
Xdebugを入れたので、まずサーバ側(/etc/php.ini)の設定。なんか入れるバージョンによって設定される文字列も違うのかな? なので自分が入れた時のデフォルトの設定は書いておく。ここに一部変更したり、挿入したりしている。
いろいろあるんだけど、恐らくミニマムな設定は元々あった行に、次の行を加えれば良いらしかった。多分、最低下の行を加えないとうんともすんとも言わなかった気がする。
ただ、いろいろなところで書かれていた設定がかなり違っていたので、他のものも保険に書いておく。
多分、元々書いてあったけど必要そうな設定の一つは
それとデフォルトで指定している9000番ポートが使えないことが多いらしいので、VSCodeと同じように変える。たぶんここは予約されていないポートであれば、どちらも同じものに合わせればいいんじゃないかな。
多分、9000番でも動くんだけど、何かと競合することがあるらしく、エラーが出て動かなくなることがある。OSを再起動してすぐに使い始めると、競合することなく使えるんだけど、そのためにリブートするのもバカらしいので9000番から変えておいた方が賢い選択かもしれない。
/etc/php.d/ に設定ファイルを入れないといけないとか思ってしまうが、/etc/php.ini に設定するのも同じようなので面倒なことはしない。というか、設定が重複してどちらかに要らない設定が残ってしまいがちなのでどちらかに決めて一元化したほうがいいような気がする。
そしてわりと鬼門となるVSCodeの設定ですが、これは特に環境によって違うみたいです。つなぎ先の違いもあるし、VSCodeを入れるOSもWindowsとMacがありますしね。とりあえずPHP DebugとRemote DevelopmentのExtensionを入れて、つなぐところの手順はほかのところで見てもらうとして(手抜きw)、設定ファイルの書き方ですね。
というかSSHでつないでやるところとかは、初回と次回からのやり方が違うし、ある程度試行錯誤でやってもらわないとどうやってやるか結局迷うし。とりあえずコマンドパレットの使い方を慣れないといけない感じです。
https://qiita.com/bitcoinjpnnet/items/dc94c79bd6a69925872d
とりあえずSSHでつないでデバッグするための、launch.jsonの設定を設定します。というか、SSHのおエペレーション以外はほとんどExtensionのインストールと設定ファイルの書き方でなんとかなるレベルではあります。
左側のデバッグボタンを押して、歯車ボタンを押すと、設定のためのlaunch.jsonが出てきます。
具体的な設定は下記のようにしました。
キモとなっているのはportとstopOnEntryとpathMappingsの設定ですね。portはXdebug側と同じにすれば良くて、stopOnEntryはデバッグが始まったら先頭行で止まるようになります。そこまでは普通にできて、ステップ実行などはできます。
でも、ブレークポイントで止まらない。ググってもブレークポイントで止まらない例はたくさんあって、そこまではみんなうまく行くっぽいですね。色々他の設定をしたけど全然びくともしなくて、結局
"pathMappings"を
"${workspaceRoot}" : "${workspaceRoot}"
に設定すれば動くようになりました。正直、細かい事はわからないんですが、ここは実際のパスを設定しないといけないところなので、リモートだとこういう設定にしないといけないみたいです。ここは正しく設定しないとブレークポイントが効かないので注意しましょう。
ステップ実行ができるところまでは簡単に行くんですけど、ブレークポイントの設定はここだけっぽいので環境によって設定しないといけないみたいです。Webにある多くの環境がリモートじゃなく、ローカルであったりすることが多いので、そこはきちんと読み替えないとダメみたいです。とりあえず、SSHで他のところに繋ぐ場合はこの設定を試してみてください。少なくともデフォルトの状態では動きません。
そんなこんなでブレークポイントで止まらないところだけで困っている方は、pathMappingsをいじってみてください。他のところは他の人がやり倒しているので、ここに書いてあることをやれば大体ミニマムな設定でできていると思いますよ。まぁ無駄なことが書いてあっても大体は無害なので大丈夫なはず。
他の言語から入ってきて、PHPはステップ実行もブレークも張れないと残念に思っていましたが、やろうと思えばやれることはあるんですね。それもタダでできるのだから自己で勉強する点においては問題がない。
ステップ実行できるところまではわりとすぐにいったんだけど、ブレークポイントで止まらない止まらないw。実際ググるとブレークポイントで止まらない系の記事が結構あって、そこを見たけどみんな環境が違うから設定ファイルの書いてあることがかなり違うんですよね。PHPだけじゃなくPythonとかその他の言語でもブレークポイントで止まらないとの話があって、これはVSCodeの共通の問題点なんじゃないかと。
とりあえず環境を書いておきますね。
サーバ:VirtualBox上のCentOS7
webサーバ:Apache
クライアント・ホストOS:Windows10
あとの細かいバージョンやら状況は忘れた。特定のバージョンの記事を書いているつもりはないけど、新しくなったら設定方法とかすぐに変わるからなOSSは。
Xdebugを入れるのはPECLで入れました。仕事だとソースから入れて塩漬けできるようにした方がいいんだけど、面倒なので
sudo pecl install xdebug
で入れました。
peclが入っていないときはyumで入れる。
sudo yum install pecl
なんというか、Ubuntuはわりとsudoでやる文化があるのですが、RedHat系はsuでrootにならないといけないサンプルが多くて、複数行をコマンドをそのまま貼り付けて実行できないんすよね。#マークが行頭にくっついてきて、率直に面倒くさい。Debian系が好きなんだけども、yumがapt並みにはなっているので大体問題ない。
それとよくMacのローカルでMAMPとかでやっているのを見ましたけど、あれはリモートにつないでないので微妙に参考にならなかったりしました。LinuxとMacという違いもあることですし。とはいえ、最大公約数的な設定の重なりは見られたので良かったのかもなと思ったり。
あと先に言ったようにPHPに限らずブレークポイントで止まらないという記事が割とあったので、いろいろな問題だけど基本的な設定で不具合が出ているのかなと感じました。まぁIDEで提供されている機能をいちエディタがやろうとしているのだから無理が来ても仕方がないかも。
Xdebugを入れたので、まずサーバ側(/etc/php.ini)の設定。なんか入れるバージョンによって設定される文字列も違うのかな? なので自分が入れた時のデフォルトの設定は書いておく。ここに一部変更したり、挿入したりしている。
[xDebug] zend_extension=/usr/lib64/php/modules/xdebug.so xdebug.remote_enable=1 xdebug.remote_handler="dbgp" xdebug.remote_host="127.0.0.1" xdebug.remote_log="/tmp/xdebug.log" xdebug.remote_port=9000 xdebug.trace_output_dir="/tmp/"
いろいろあるんだけど、恐らくミニマムな設定は元々あった行に、次の行を加えれば良いらしかった。多分、最低下の行を加えないとうんともすんとも言わなかった気がする。
xdebug.remote_autostart=1
ただ、いろいろなところで書かれていた設定がかなり違っていたので、他のものも保険に書いておく。
多分、元々書いてあったけど必要そうな設定の一つは
xdebug.remote_enable=1
それとデフォルトで指定している9000番ポートが使えないことが多いらしいので、VSCodeと同じように変える。たぶんここは予約されていないポートであれば、どちらも同じものに合わせればいいんじゃないかな。
xdebug.remote_port=9001
多分、9000番でも動くんだけど、何かと競合することがあるらしく、エラーが出て動かなくなることがある。OSを再起動してすぐに使い始めると、競合することなく使えるんだけど、そのためにリブートするのもバカらしいので9000番から変えておいた方が賢い選択かもしれない。
/etc/php.d/ に設定ファイルを入れないといけないとか思ってしまうが、/etc/php.ini に設定するのも同じようなので面倒なことはしない。というか、設定が重複してどちらかに要らない設定が残ってしまいがちなのでどちらかに決めて一元化したほうがいいような気がする。
そしてわりと鬼門となるVSCodeの設定ですが、これは特に環境によって違うみたいです。つなぎ先の違いもあるし、VSCodeを入れるOSもWindowsとMacがありますしね。とりあえずPHP DebugとRemote DevelopmentのExtensionを入れて、つなぐところの手順はほかのところで見てもらうとして(手抜きw)、設定ファイルの書き方ですね。
というかSSHでつないでやるところとかは、初回と次回からのやり方が違うし、ある程度試行錯誤でやってもらわないとどうやってやるか結局迷うし。とりあえずコマンドパレットの使い方を慣れないといけない感じです。
https://qiita.com/bitcoinjpnnet/items/dc94c79bd6a69925872d
とりあえずSSHでつないでデバッグするための、launch.jsonの設定を設定します。というか、SSHのおエペレーション以外はほとんどExtensionのインストールと設定ファイルの書き方でなんとかなるレベルではあります。
左側のデバッグボタンを押して、歯車ボタンを押すと、設定のためのlaunch.jsonが出てきます。
具体的な設定は下記のようにしました。
{ "version": "0.2.0", "configurations": [ { "name": Listen for XDebug "type": "php", "request": "launch", "port": 9001, "stopOnEntry": true, "pathMappings": { "${workspaceRoot}" : "${workspaceRoot}" } } }
キモとなっているのはportとstopOnEntryとpathMappingsの設定ですね。portはXdebug側と同じにすれば良くて、stopOnEntryはデバッグが始まったら先頭行で止まるようになります。そこまでは普通にできて、ステップ実行などはできます。
でも、ブレークポイントで止まらない。ググってもブレークポイントで止まらない例はたくさんあって、そこまではみんなうまく行くっぽいですね。色々他の設定をしたけど全然びくともしなくて、結局
"pathMappings"を
"${workspaceRoot}" : "${workspaceRoot}"
に設定すれば動くようになりました。正直、細かい事はわからないんですが、ここは実際のパスを設定しないといけないところなので、リモートだとこういう設定にしないといけないみたいです。ここは正しく設定しないとブレークポイントが効かないので注意しましょう。
ステップ実行ができるところまでは簡単に行くんですけど、ブレークポイントの設定はここだけっぽいので環境によって設定しないといけないみたいです。Webにある多くの環境がリモートじゃなく、ローカルであったりすることが多いので、そこはきちんと読み替えないとダメみたいです。とりあえず、SSHで他のところに繋ぐ場合はこの設定を試してみてください。少なくともデフォルトの状態では動きません。
そんなこんなでブレークポイントで止まらないところだけで困っている方は、pathMappingsをいじってみてください。他のところは他の人がやり倒しているので、ここに書いてあることをやれば大体ミニマムな設定でできていると思いますよ。まぁ無駄なことが書いてあっても大体は無害なので大丈夫なはず。
他の言語から入ってきて、PHPはステップ実行もブレークも張れないと残念に思っていましたが、やろうと思えばやれることはあるんですね。それもタダでできるのだから自己で勉強する点においては問題がない。
タグ:PHP
Twitterまとめ投稿 2020/01/24 [Twitter]
carbonhydrat東芝は「量子暗号通信」と呼ばれる次世代の暗号技術を来年度アメリカで実用化する方針を決めました。実現すれば日本企業としては… https://t.co/B4ZPNb6bUT 東芝は技術があるが経営側がとんでもない悪手を打つから困るんだよな01/23 11:40 carbonhydratRT @sarasiru: 「ゲームよりうどん」糖尿病による死亡者が多い香川県に規制を提案 https://t.co/MnHBo51HIk “うどんを常食していない人が、他人のうどん食にケチを付けることは簡単だ。少なくとも僕は、週にうどんが3杯に制限されようと困らない。困らない…01/23 12:07 carbonhydratRT @osaka_seventeen: 「自炊は高コスト派」と「自炊は低コスト派」の間には、「とりあえず野菜二種類と豚肉を雑に炒めたものが主菜でそれと白飯のみが晩ご飯」を「自炊」に含めるかどうかという巨大な溝があると思う。あと、焼き肉のたれとめんつゆを信じろ。01/23 12:16 carbonhydratRT @otakulawyer: 「『表現の自由』を盾にしない」というパワーワードが衆院選候補者から出るとは...。日頃護憲、護憲とのたまう共産党員の憲法理解の浅薄さがよく分かるツイートであると思いますよ。 <日本国憲法21条> 集会び言論、出版その他一切の表現の自由は、これを…01/23 12:28 carbonhydratRT @tacowasabi0141: 自衛隊の日誌 日本政府「無くしました」 財務省のデータ 日本政府「半年で消えました」 桜を見る会の名簿 日本政府「即シュレッダーしました」 桜を見る会前夜祭 安倍「たまたま収支が合いました」 日本政府「マイナンバーと金融口座を紐つ…01/23 15:05 carbonhydratRT @dokuninjin_blue: フェミニストのみなさんが巨乳女性の表象に嫌悪感があることは理解しました。しかしあなた方のその嫌悪感はあなた方のものなのであって、普遍的なものでもなければ、社会的に特別な配慮を必要とする公共性を有するものでもありません。01/23 15:08 carbonhydratRT @syakkin_dama: みんなが「不快だ、社会からなくせ」って言ったとしても、「待って、それって本当に正しいの?」って問う立場がリベラルちゃうんすかね。「それやったら胸の大きい女性から広告に出演する権利を奪っちゃうよ、それって守らなきゃダメじゃない?」ってのがリベラ…01/23 15:08 carbonhydrat安倍首相の反論は 「〜という指摘は全く当たりません」 というワンパターンなのだが、 大体は説明になっていなくて相手の鋭い指摘を否定するだけ。 そんなの答弁にも何もなってないよ。01/23 21:25 carbonhydrat変なキノコとかよりかはよっぽど効きそうだな。にしてもアラビックヤマトw https://t.co/gH5Ng1reNH01/23 21:31
2020-01-24 05:01
コメント(0)