如何在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的配置

需要注意:

  1. 如果你只是想测试一个文件,那么也需要为它单独建一个项目文件夹。
  2. 接来来的操作只是针对当前项目的配置,如果新建一个项目之后需要再次配置。
  3. 配置完成后会在.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

注意:

  1. 打开debug界面之后要选择Launch currently open script
  2. 打断点!
  3. 按F5 或者 在菜单栏Debug->Start Debugging 或者 点 Debug界面的绿色三角箭头开始调试。

网页debug

注意:

  1. 打开debug界面之后要选择Listen for XDebug
  2. 打断点!
  3. 按F5 或者 在菜单栏Debug->Start Debugging 或者 点 Debug界面的绿色三角箭头开始监听。
  4. 这里需要把浏览器安装的XDebug Helper的小虫子点成绿色的,其实debug的话不管它也行。
  5. 浏览器访问对应的网页地址

步骤有点多,但是每一步都做对的话,就能开心的debug了,再也不用dd(),var_dump()了。

加载评论框需要科学上网