如何在VSCode中用XDebug来调试PHP程序
想想刚接触PHP的时候,想要像Java一样debug简直是折腾的耐心都没了。设置这设置那,最终也没成功。调试单个PHP文件可以,可偏偏用的是框架,又是各种莫名其妙的debug不生效。不知道你有没有这么折腾过。
而且由于PHP脚本调试也方便,原生就echo xxxx;var_dump();die; Laravel就dd();dump();所以有时候就真的懒得去折腾那个难搞的XDebug。
不过有时候dd(),dump()之类的不好用,比如两个PHP系统之间调用的时候,这个时候debug就很难受了,d了也看不见,只能写日志。所以还是有必要配好debug功能的。
下面就来详细介绍下怎么顺利的配置debug环境,不过这篇文章是用类unix的操作系统来演示的。windows的话流程一直,只是具体的操作需要根据后面的诊断结果执行即可。
运行环境
VSCode, PHP7+
安装XDebug
获取phpinfo
方法1:
大家最熟悉的应该就是:1
2
3<?php
phpinfo();
?>
然后全选复制,或者复制源码。
方法2:
在命令行输入1
$ php -i > phpinfo.txt
php -i
就是打印当前PHP环境的信息,> phpinfo.txt
只是为了方便拷贝
复制txt文件的全部内容。
诊断PHP环境
打开xdebug官网的引导页:https://xdebug.org/wizard.php
把刚才复制的内容粘贴到文本框中,然后点击Analyse my phpinfo() output
按钮。
然后你会看到和下面图片类似的结果:
Xdebug installed
- no 说明我现在没有安装xdebug扩展。
- yes 恭喜你,说明你的环境已经装好了xdebug,不需要而外折腾了。
Configuration File
你的php.ini文件的路径,这个后面需要改。
Extentions directory
这个是PHP扩展安装的文件夹位置,后面也要用到。
诊断结果的下面还有一个安装xdebug的完整指导,可以直接参考:
安装xdebug
如果你清楚自己在干什么,那么你完全可以按照上面的1-8步骤安装好xdebug。
arch linux安装
我linux用的是manjaro,基于arch的发行版,很好用。
然后PHP装的7.0的,所以我就先搜索软件仓库,$ yay -Ss php70-xdebug
发现有这个软件,然后安装即可:$ yay -S php70-xdebug
mac安装
本来想用brew安装的,发现没有search到对应的包,我就放弃了,刚好就用截图上的方法装一下。
需要注意的地方就是:
cp modules/xdebug.so /usr/local/lib/php/pecl/20170718
首先地址肯定要以你本机的为准,其次如果你对类unix的操作系统还不熟的话,可能会遇到一个permission denied的错误,这时在需要最前面加sudo授权, 即sudo cp modules/xdebug.so /usr/local/lib/php/pecl/20170718
- 编辑php.ini的时候同样可能需要sudo授权,并且如果配置了php扩展文件夹参数的话,可以直接写
zend_extension=xdebug.so
。
配置xdebug
- php.ini文件除了把xdebug.so加进去之外,还需要添加两个相关配置,并且确保把这个配置加到文件的末尾,这样大概率可以避免其他可能出现的问题,配置如下:
[xDebug] zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_autostart=on
VSCode配置
安装PHP Debug扩展
在debug界面中添加PHP的配置
需要注意:
- 如果你只是想测试一个文件,那么也需要为它单独建一个项目文件夹。
- 接来来的操作只是针对当前项目的配置,如果新建一个项目之后需要再次配置。
- 配置完成后会在.vscode目录下生成一个launch.json文件。
在VSCode的左侧导航栏上点击Debug,然后选择添加配置:
在下拉选中选择PHP
然后添加你本机的PHP可执行文件地址,用于调试单个php脚本文件,如果本身配置好了环境变量的话,此处这可以不用特意配置。
如果9000端口被你的其他程序占用的话,可以修改成一个别的端口,但是对应的php.ini里也要修改xdebug端口配置xdebug.remote_port=9000
- Listen for XDebug是用于调试PHP网页程序的
- Launch currently open script是用来调试单纯的PHP脚本的,比如写一个命令行程序的时候。
浏览器配置
Chrome安装XDebug Helper:
我发现其实不用装也可以调试,但是国际惯例都是装一下, 而且还有一些其他的功能,不过不在这次的讨论范围。
开始DEBUG
直接执行PHP文件进行debug
注意:
- 打开debug界面之后要选择Launch currently open script
- 打断点!
- 按F5 或者 在菜单栏Debug->Start Debugging 或者 点 Debug界面的绿色三角箭头开始调试。
网页debug
注意:
- 打开debug界面之后要选择Listen for XDebug
- 打断点!
- 按F5 或者 在菜单栏Debug->Start Debugging 或者 点 Debug界面的绿色三角箭头开始监听。
- 这里需要把浏览器安装的XDebug Helper的小虫子点成绿色的,其实debug的话不管它也行。
- 浏览器访问对应的网页地址
步骤有点多,但是每一步都做对的话,就能开心的debug了,再也不用dd(),var_dump()了。