如何在 VSCode 中调试 Homestead 中的 Laravel 代码?(XDebug + PHPUnit)
在我的文章《调试: 配置 VSCode + Xdebug + PHPUnit 》中收到一些很好的反馈后,有几个人请我帮他们在 Laravel Homestead 环境中配置 Xdebug 设置。 添加一个虚拟机确实会增加一些复杂性,但是拥有一个适当的调试环境的好处远远大于最初的调试工作。
下面假设你已经为项目安装了 Homestead。
Homestead 中启用 Xdebug
1. SSH 连接到你的 Homestead:
homestead ssh
2. 使用 Homestead 的 xon
命令启用 Xdebug:
xon
3. 找到虚拟机的网关 IP。 它将会是虚拟机可以和主机通讯的 IP
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
我在 Homestead 机器上看到的输出是10.0.2.2
; 请记住下来,下一步有用。
4. 查看本地 xdebug.ini
—— Xdebug 配置文件:
php --ini | grep 'xdebug'
我的输出显示 ini 文件在 /etc/php/7.1/cli/conf.d/20-xdebug.ini
5. 配置 Xdebug,使用前面查到的网关作为xdebug.remote_host
的值:
编辑刚刚定位到的xdebug.ini
文件:
sudo vim /etc/php/7.1/cli/conf.d/20-xdebug.ini
确保设置是这样设置的,适合你的网关 IP:
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=10.0.2.2
7. 重启 PHP-FPM 服务
sudo service php7.1-fpm restart
VSCode 配置
1. 安装 PHP Debug 插件
2. 打开 debug 面板
3. 单击 “config” 按钮 (齿轮) 然后选择 PHP
4. 修改默认的 launch.json
文件:
请编辑此文件确保填写正确的 localSourceRoot
和 serverSourceRoot
:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
},
{
"name": "Listen for XDebug on Homestead",
"type": "php",
"request": "launch",
"pathMappings": {
"/home/vagrant/Code/tighten-app-homestead": "/Users/jose/Code/tighten-app-homestead"
},
"port": 9000
}
]
}
这里,我们添加了一个和 Listen for Xdebug
一样的配置, 此外,我们还按照插件文档中关于远程主机调试的说明包含了 pathMappings
的值。
5. 打开一个 PHPUnit 测试文件然后使用调试器插件设置一个断点。
6. 设置调试器为 「Listen for XDebug on Homestead」。
7. 点击绿色箭头按钮「开始调试」
这实际上不会启动调试过程; 相反,它会启动一个侦听器,一旦运行 PHPUnit 测试,该侦听器就会被触发。
现在你应该看到一个步骤工具栏,蓝色箭头按钮变成灰色:
调试!
现在你可以在 Homestead 虚拟机中运行你的测试了:
phpunit --filter some_test_name
Visual Studio Code 应该显示第一个断点,并且步骤工具栏将允许你单步执行代码。
关于性能要注意的
开启 Xdebug 确实会影响性能。 如果你不在需要调试, 可以通过 ssh 进入 Homestead 虚拟机并使用 xoff
命令来轻松禁用 Xdebug 插件。
愉快地调试!!
希望本教程帮助你开启一个合适的调试环境。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。