之前本地开发环境一直都是自己搭建的 安装好各个软件关联起来就好了 或者就是 集成软件 后来学习 Laravel
框架后官方推荐使用 Homestead
做为开发环境 然后从 Laravel China 教程搭建了一套环境 windows 环境 、 Mac 环境。 后来换了一次系统后 发现 Xdebug
不能用了…事情的起因大概就是这样了
Xdebug 是什么
Xdebug是PHP的扩展,用于协助调试和开发。
它包含一个用于IDE的单步调试器; 它升级了 PHP 的 var_dump()
函数;
它为通知,警告,错误和异常添加了堆栈跟踪;
它具有记录每个函数调用和磁盘变量赋值的功能; 它包含一个分析器;
它提供了与PHPUnit一起使用的代码覆盖功能
如果你还在使用 var_dump
echo
dd
等 还是赶紧来使用下 xdebug
吧 能提升你的调试效率 还能看到各种变量的变化等
Xdebug 安装
关于安装 点击这里
如果你是使用的上面的开发环境 里面已经集成好了 可以通过 phpinfo()
来输出信息
如果你看到下面的信息就是安装成功了
需要注意一下 因为我的环境里有 4 个版本的 PHP 所以一定要确认你当前web端访问的那个是哪个版本的PHP 最好的办法就是通过 phpinfo()
来确认 如果是从服务里直接执行的 PHP 命令 是使用的 php-cli 模式
运行的是默认的 PHP 在我的环境里也就是7.2的 而 FPM 执行的是 7.1的 PHP
IDE 与 Xdebug 的通信
IDE 与 Xdebug之间的通信有2种方式
静态绑定客户端
通信流程大概入下图
在上面的 配置 xdebug.remote_connect_back = 0
xdebug 在收到调试通知时会读取配置 xdebug.remote_host
和 xdebug.remote_port
默认是 localhost:9000,然后向这个端口发送通知
根据请求动态获取IP
这种通信流程如下
也就是上面的配置 把 xdebug.remote_connect_back = 1
即可 这个时候 将会忽视 remote_host
的配置,以请求来源的 IP 作为 xdebug 响应的 IP
Xdebug 配置
首先找到 PHP 的扩展配置目录 不同环境配置不同 路径也不同 我的路径大概如下
|
|
因为我是使用的 7.1 版本的PHP 所以进入到7.1目录下 /etc/php/7.1/mods-available
在这个目录下 会有很多的扩展配置文件
编辑 xdebug.ini
文件 这个是我的配置 不要直接抄袭 有几个参数需要改下
|
|
默认端口是 9000 这里我是自己随便改的 只要改了后和IDE中设置的端口一致就可以了
你可以改 也可以不改 另外 日志目录 一定要设置下 方便排错
我遇到的问题
我本地是采用的第一种绑定IP的形式, 因为我在使用 VirtualBox
虚拟机的时候把网络固定了 192.168.10.1
一直是这个IP
而我本机的IP是 192.168.1.32
当我第一次采用动态获取IP地址的时候调试 xdebug 一直是失败的 最后查看下日志发现
|
|
根据上面的第一次错误信息可以看到 xdebug在尝试连接 192.168.10.1
这个地址 从虚拟机里直接ping 这个地址是不通的
所以我把本地的ip地址也给固定死了
直接使用了绑定IP的方式 你们不要学我,如果哪天ip地址变了也要来改这里
然后重启 FPM 我的版本是 php7.1
|
|
至此我的问题是解决了 总结2点
一、理解原理
二、多看日志
下面就只是一个Xdebug的安装教程方便自己回忆
PHPStorm的配置
设置 PHP 的版本 以及 CLI 的版本
不设置也可以 如下图:
讲下 Cli Interpreters
的设置
点击后面的 ...
进入
然后添加 选择 From Docker, Vagrant,VM,Remote
然后单击选中 Vagrant
因为我是用的vagrant管理虚拟机的(请根据自己的实际情况选择)
然后 Vagrant Instance F...
选择你的 Homestead
目录即可 不需要进入目录里 比如我的 E:/Homestead
最后他会自己加载到你的PHP-CLI版本信息等
设置PHP-Debug
注意配置的端口号要和你的 xdebug.ini
中配置的端口号一致 上面2个不要勾选 勾了刚进入的时候就会启动调试
设置PHP-Server
注意 Host
里设置你的项目访问地址 如果有配置虚拟主机域名的 可以填你的配置域名 然后端口80 后面选 Xdebug
因为是使用的虚拟机 所以要勾选 Use Path mappings
目录映射
首先是本地的项目目录 然后后面的 绝对路径写虚拟机中的绝对路径 如上图 这里一定要映射不然会找不到
设置 Debug
在下面位置设置Debug测试
然后新建一个 PHP Web Application 设置如下
Server一项选择签名创建的Server名字 路径写 /
就好了 表示项目全路径
测试 Debug
打开监听 如下图
在代码中设置断点 然后点击那个小虫子图标启动 当执行到断点的时候 在IDE的控制面板中 出现下图即表示成功了
Chrome 中 Xdebug 插件配置
其实上面已经可以了 不设置浏览器debug插件也可以的 如果你不想每次都点击那个小虫子来启动debug的话 可以继续往下看 安装一个Chrome的Xdebug插件 每次运行到你的断点的时候他会自动检测到
Xdebug-helper 插件下载
下载地址:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
安装成功后会在浏览器的插件栏里 一样是一个小虫子的图标 点击后有4个选择
1.Debug
2.Profile
3.Trace
4.Disabled
点击Debug的时候就表示启动了 然后会默认选中这个选项 他会记住域名的
Xdebug-helper 插件配置
在那个小虫子图标上点击 右键->选项
进入配置页面
找到 IDE Key 一项 选择自己使用的 IDE 工具 这里我是 PHPStorm 可以看到他默认的值是 PHPSTORM
不能修改(至今不知道怎么在chrome里修改它…) 上面的配置里已经设置过了这个值 默认即可
现在输入域名访问下 然后启动浏览器插件里的debug 点击使那个小虫子图标变绿就表示启动了
然后在代码里打上断点 当浏览器放到断点的代码时 IDE 中的控制台看到和上面一样成功的界面就表示Xdebug启动成功
参考
https://juejin.im/entry/58fdc9868d6d8100589d826a
https://segmentfault.com/a/1190000016366104