文章目录
前言
XDebug3的参数已经发生了改变,所以即使调试本地代码,也需要在php.ini中做一定修改。
使用PHPStorm调试虚拟机远程代码时,也需要进行特殊设定。
一、XDebug参数设定
1. 调试环境
$ vagrant ssh
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-65-generic x86_64)
* Homestead v12.0.0
* Settler v11.0.0 (Ubuntu 20.04)
$ vagrant version
Installed Version: 2.2.14
virtualbox 6.0
phpstorm 2020.3.3 (旧版本不能适配xdebug3)
二、配置XDebug
1. 开启XDebug
HomeStead默认是开启了PHP XDebug模块的。
也可以在配置文件中确认,以PHP 8.0为例:
vi /etc/php/8.0/mods-available/xdebug.ini
注意,新版本PHP使用的是XDebug3,所以配置语法会有一些差异。原来的需要删掉:
#zend_extension=xdebug.so
#xdebug.remote_enable = 1
#xdebug.remote_connect_back = 1
#xdebug.remote_port = 9000
#xdebug.max_nesting_level = 512
zend_extension=xdebug.so
#xdebug.remote_enable =On
xdebug.mode=debug #这个是开启debug
xdebug.start_with_request=yes
xdebug.remote_connect_back = 1
#xdebug.remote_host=localhost
xdebug.client_host=192.168.10.1 #主机的ip,vagrant虚拟机的IP是192.168.10.10
#xdebug.remote_port =9005
xdebug.client_port=9005 #对应PHPStorm中也是这个端口,默认的话是9000/9003
xdebug.max_nesting_level = 512
xdebug.idekey=PHPSTORM
xdebug.remote_log=/tmp/xdebug.log
修改完成后,需要重启php-fpm来使用新配置
vagrant@laravel:~$ sudo service php8.0-fpm restart
2. 配置检查
还是使用之前的phpinfo();页面来测试
这两个值如果是对的,说明xdebug模块已经启动成功
三、配置PHPStorm
1. 配置Debug Configure
点击这里进入配置界面
点击左边加号,新增一个PHP Remote Debug项目,然后填写好下面的几个选项。
最重要的是IDE key,这个和刚才xdebug.ini里设置的xdebug.idekey=PHPSTORM
是对应的。
点击Server右边的…,新增一个Servers项目:
Host:Port指的是我们调试哪个页面。
homestead.test 是虚拟机WebServer服务的Url
Http请求默认走80端口
另外最重要的就是将本地代码和WebServer的代码映射填好。右边填写虚拟机上的代码路径。
下一步,通过File->Setting对PHP CLI进行设置
选择新增一个Vagrant的CLI,将Instance Folder设定为我们HomeStead工程所在的目录,成功后能看到如下显示:
返回Setting界面,点开Debug子选项
这里改成9005的目的,是因为上面xdebug.ini里设定的xdebug.client_port=9005
最后,校验一下,看看PHPStorm是否能够成功链接虚拟机:
这里有个小坑,最新版本的Laravel,将index.php放到了public目录下,所以这里validate会出错。
需要改一下目录:
到此位置,PHPStorm就和homestead虚拟机链接上了。
四、配置浏览器
1. 安装插件
以Chrome为例,可以去扩展程序页面,搜索Xdebug helper。
或者直接打开:
https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
安装后即可看到右上角的debug标志。
切换到http://homestead.test/页面,点击标志,选择debug,标志会变绿
2. 打开PHPStorm调试
先开启调试,然后打开Start Listening for PHP Debug Connections
打上断点,刷新页面,断点生效!