VS Code + Homestead + Xdebug 断点调试配置

一、准备工作

Homestead 开发环境,VS Code 编辑器,Chrome/FF 等开发者友好型浏览器。

二、Homestead 中的配置

Homestead 中已经安装好了 Xdebug,无需再次安装,通过 phpinfo() 可以看到详细信息:
file

  1. 先登录到 Homestead 中
    [your_host Homestead]$ vagrant up && vagrant ssh
  2. 启用 Xdebug
    vagrant@homestead:~$ xon
  3. 找到 Homestead 虚拟机的网关,方法有多种,这里使用 route 命令
    vagrant@homestead:~$ route -n

    输出结果:
    file
    可看到我这里的网关为 10.0.2.2 ,记录下来

  4. 找到 Xdebug 配置文件 xdebug.ini 的路径,注意:请先启用 Xdebug
    vagrant@homestead:~$ php --ini | grep 'xdebug'

    输出结果根据实际环境定,我的输出结果为:

    /etc/php/7.2/cli/conf.d/20-xdebug.ini
  5. 修改该配置文件
    vagrant@homestead:~$ sudo vim /etc/php/7.2/cli/conf.d/20-xdebug.ini

    将原配置替换为如下:

    zend_extension=xdebug.so
    xdebug.remote_enable=1
    xdebug.remote_autostart=1
    xdebug.remote_host=10.0.2.2 #此处填入刚才获得的网关
  6. 重启 PHP-FPM 服务
    vagrant@homestead:~$ sudo service php7.2-fpm restart

三、VS Code 中的配置

  1. 安装并启用 PHP Debug 扩展
    file
  2. 打开 Debug 面板,添加配置项,就是那个齿轮,点击后选择 PHP
    file
    {
    "version": "0.2.0",
    "configurations": [
       ...
        {
            "name": "Listen for XDebug on Homestead",
            "type": "php",
            "request": "launch",
            "pathMappings": {
                "/home/vagrant/Code": "/home/doderick/Code"    // 此处按实际映射路径填写
            },
            "port": 9000
        }
    ]
    }

    此时会在 VS Code 打开的目录下生成一个 .vscode/launch.json 文件用于保存配置,该配置文件可供任一置于 /home/vagrant/Code 目录下的项目使用。

  3. 打开项目文件,开始调试
    file
    回到浏览器中访问一下断点处的路由
    file
    可以看到左边栏已经出现了调试的结果,开始欢乐地调试吧~

四、 其它

我们并不需要时时刻刻进行调试,开启 Xdebug 毕竟也要消耗一些宝贵的系统资源,可以用一条简单的命令禁用 Xdebug:

vagrant@homestead:~$ xoff
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

chrome 访问可以正常断点,但是 postman 访问就无法断点,这是怎么回事

4年前 评论

@huzhuolei 浏览器访问和 postman 访问本质上没有区别,而我这里实测,浏览器和 postman 访问都可以进入断点。请确认是否访问了需要断点的接口,在到达断电前,脚本是否已经发生了中断。

4年前 评论

先说一下背景,我是 laravel + dingo 开发 api 程序。现在问题已经解决,我找到 chrome 和 postman 的区别了,chrome 我安装了 xdebug helper 扩展,当激活扩展的 debug 模式以后可以正常进入断点。但是在 postman 中没有扩展,只能手动添加一个 query 参数:XDEBUG_SESSION_START,值为 XDEBUG,这样就能正常进入断点了。

4年前 评论

@huzhuolei 感谢提供反馈,能自己解决问题是最有成就感的。

4年前 评论

那个pathMappings中,实际映射路径是怎么填写的?

4年前 评论

@heheym 虚拟机中代码所在的绝对路径:本地代码所在的绝对路径

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!