PHP调试

1 PHP配置

PHP调试用到xdebug插件作为调试服务。在筋斗云开发环境中默认已包含xdebug并已开启(在php.ini有相关配置)。 xdebug 2.x版本配置项(默认端口9000):

[xdebug]
xdebug.remote_enable=1

xdebug 3.x版本配置项(默认端口9003,这里和之前一致改为9000了):

[xdebug]
xdebug.mode=debug
xdebug.client_port=9000

服务端检查xdebug是否安装:php -m中查看是否有Xdebug. 如果没有安装,可用yum/apt搜索xdebug包(一般名为php-xdebug或php-pecl-xdebug)。 在centos7/ubuntu20中xdebug均默认是2.x版本。

2 调试器配置 - vscode

调试器(调试客户端)可以使用vscode,点左侧“扩展”图标,找到并安装PHP Debug插件(或推荐的PHP插件,也支持调试)。打开项目目录中的PHP文件,设置断点。 按F5开始调试,第一次调试时,它要求设置launch.json文件。打开它配置一下端口,使用9000:

    {
        "name": "Listen for Xdebug",
        "type": "php",
        "request": "launch",
        "port": 9000
    }

注意:vscode支持远程开发调试。配置好后可直接连接生产环境调试。

3 前端须激活调试

前端也必须激活调试才可以,其原理是在URL中添加XDEBUG_SESSION_START=1参数(或是在cookie中添加)。

方法一:在打开Web应用后,在F12的网络监测中随便找一个xhr请求,双击打开,在URL参数后添加&XDEBUG_SESSION_START=1,比如 http://localhost/jdcloud/server/api.php/Employee.query?xp=xxxxx&XDEBUG_SESSION_START=1 只需设置一次,在关闭浏览器前都可一直调试(因为会在cookie中记录XDEBUG_SESSION=1)。

方法二:chrome安装PHP Debug扩展,在要调试时激活它。(google的服务器不太好访问,导致chrome扩展安装需要fanqiang)。像这样:

然后就可以看断点是否命中了。

4 其它可选调试器

除了vscode,调试器还可以使用netbean等集成工具; 如果使用Vim,可以用Vdebug插件,我做了一些修改以适配vs的快捷键:vdebug-lj-1.4.2.vmb。调试如下:

5 调试超时问题

Apache中应设置fastcgi调用php合理的超时时间,否则一调试没多久连接就中断了, 找到D:\Apache24-x64-vc15\conf\__user.conf(根据你的安装路径来找),修改factcgi相关选项:

#最大执行时间  改10分钟吧(默认约2分钟)
FcgidIOTimeout 600
FcgidIdleTimeout 600

然后重启Apache生效。

6 远程调试

调试服务器上apache+php代码技巧:

注意:虽然vscode支持强大的remote-ssh调试功能,可直接远程连接到服务器上修改和调试文件。 但它会在服务器上自动安装vscode server,内存消耗较大,可能导致服务器死机,不建议使用!