0%

PHP使用VSCode+XDebug调试

要说php的调试功能对效率有多大提升,这个问题我只想说:反正我用过之后再也不var_dump了,而且代码review神速。别说有什么好处了,试试就知道了。

再说说VSCode,是真的不卡,电脑一个月不关机,VSCode一个月不用重启。

我是从phpstorm转过来的,不得不说phpstorm不论怎么卸掉插件,怎么关闭无用功能,依然各种卡,开始我是两个ide并行的,使用一段VSCode后,果断卸掉了phpstorm

开始步入正题,安装调试功能,原理很简单,如下:

  • XDebug带有远程调试功能(remote)
  • 在php.ini配置监听地址和端口
  • 在VSCode中配置监听端口后即可调试

给PHP安装Xdebug

  1. 下载php_xdebug.dll

    有的集成环境的php/ext目录下是有这个文件的,这时直接在php.ini中引入即可

    zend_extension="E:\phpStudy2018\PHPTutorial\php\php-5.5.38\ext\php_xdebug.dll"

    如果没有这个文件,可以去这里下载:XDebug,然后放到php/ext目录

    注意需要匹配自己的PHP版本,还有tsnts(是否线程安全),怎么判断自己的是ts还是nts,去php_info()中找Thread Safety,如果是enabled则为ts版本。

    注意在php.ini中配置时必须是使用zend_extension,使用extension会报错。

  2. 配置XDebug

    方案一

    ;引入php_xdebug.dll
    zend_extension="E:\phpStudy2018\PHPTutorial\php\php-5.5.38\ext\php_xdebug.dll"
    ;设置是否开启
    xdebug.remote_enable=1
    ;是否使用默认配置,并自动开启调试
    xdebug.remote_autostart=1
    ;展示全部输出内容
    xdebug.var_display_max_data=-1

    方案二(推荐)

    ;引入php_xdebug.dll
    zend_extension="E:\phpStudy2018\PHPTutorial\php\php-5.5.38\ext\php_xdebug.dll"
    ;设置是否开启
    xdebug.remote_enable=1
    ;远程调试的地址
    xdebug.remote_host=localhost
    ;端口
    xdebug.remote_port=9000
    ;用于ide识别调试请求的key,为空也可以,可以不配置
    ;xdebug.idekey="PHPSTORM"
    ;展示全部输出内容
    xdebug.var_display_max_data=-1

    方案二需要配合浏览器插件,方案一不需要要

    方案一有一个特别大的问题,如果你的代码中有curl请求本地代码(比如view调用api层)时,会直接卡死,不知道后期XDebug会不会修复,目前2.6版本尚有这样的问题。

  3. 查看是否安装成功

    cmd中,到PHP目录下执行php -m,查看是否显示XDebug

安装浏览器插件

此插件可以自动为请求增加XDEBUG_SESSION=PHPSTORM的Cookie,默认值为PHPSTORM,插件也可以自定义设置Cookie的值。

VSCode只会判断是否存在XDEBUG_SESSION即可调试,并不会判断XDEBUG_SESSION的值

插件下载地址:https://chrome-extension-downloader.com/

输入:eadndfjplgieldjbigjakmdgkmoaaaoc

设置VSCode

切换到调试标签,添加项目调试配置

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"xdebugSettings": {
"max_data": -1
}
}
]
}

点击绿色运行小箭头或按F5即可开始调试。

到这里就已经结束了,快去打个断点,去浏览器请求下试试吧。

请我喝杯咖啡吧 Coffee time !