孤独プログラマー譚

孤独死が近い。

Windows+PHP+Vdebug ブレイクポイントで止まらない

Vimを使う者として、IDE統合開発環境)に負けたくないという気持ちはある。

だが、さすがにログや画面にvar_dump()し続けることに疲れてきてしまった。

ということで、vdebug(ステップ実行できるVimプラグイン)を使うことにした。

環境:
Windows10
Docker
PHP7
Xdebug
Gvim(Kaoriya)

・vdebugの設定
let g:vdebug_options['path_maps'] = {"/var/www/html": "C:/Users/me/my_project/html"}

バックスラッシュで「C:\Users\me\my_project\html」と指定すると、動かない。
「C:/Users/me/my_project/html」通常スラッシュにすると、動く。

しかし、なぜかブレイクポイントで止まらない。ブレイクポイントを設定しても無視される。なぜ?

PHPStormだと、正常にブレイクポイントで止まる。でもvdebugだと止まらない。このままだと…IDEに負けてしまう!?

Xdebugのログを比べてみた。

(一部略)
・PHPStorm
breakpoint_set -f file:///var/www/html/index.php


・vdebug
breakpoint_set -f "file:///C:\Users\me\my_project\html\index.php"

ファイルの指定部分がローカルになっている…?

仕方なく、プラグインのソースを追ってみる。
うっ、Pythonで書かれてる…勉強せねば…。

・変数
remote : file:///var/www/html
local : C:/Users/me/my_project/html
filename : C:\Users\me\my_project\html\index.php


filename = filename.replace(local, remote)

どうも、/ と \ の違いが原因で、置換が上手くいってないっぽい。

/vdebug/python3/vdebug/util.py


def _create_remote(f):
 ret = f
 ret = ret.replace('\\', '/') ← 追加

これで、正常に置換できて、ブレイクポイントでも止まるようになった。

今日一日が無駄にならず済みました。

これからは「Vimでもステップ実行できる」と胸張って言えるぞ~。