0%

实现vscode+Xdebug调试php🐘

昨天在看thinkphp5.0的远程执行代码漏洞,由于里面的类和方法实在是有点多,看别人的博客感觉不够,便想着自己把代码clone下来调试一下。由于以前调试的php基本都是单个的php脚本,var_dumpecho就能解决大多数问题,所以一直没试过单步调试php。这次我决定配置vscode使其可以调试大型的php项目。

php集成开发环境

首先是php的集成开发环境,我以前用的是phpStudy,挺方便,但是因为phpStudy对surface的分辨率适配没做好,每次打开窗口字体都特别小,调到正常大小以后又特别模糊。所以最近换成了wampserver。安装好wampserver,打开启动apache服务。

VSCode

vscode需要安装两个插件,PHP Debug和PHP Intelephense。前者用来调试程序,后者提供一些语法补全和代码高亮等功能。

Xdebug

Xdebug是一个php的调试器,在用vscode调试php代码的时候,我们需要用vscode监听Xdebug的某一端口以调试。所以我们需要再安装与配置Xdebug。有一个很方便的方法就是Xdebug官方给出了一个Installation Wizard页面方便用户进行安装。启动wampserver,打开phpinfo页面,把源代码粘贴到输入框中,页面就会生成当前版本匹配的Xdebug的dll版本,以及一个安装配置教程。

下载下来dll,打开php.ini。新版本的wampserver是集成了Xdebug的,因此在最后我们可以看到[XDebug]的字样,就是Xdebug的配置参数区域,默认也是有一个版本的dll的,但是和官网提供的版本不一样,所以我还是重新配置了一次,这里贴出来我的配置文件。

1
2
3
4
5
6
7
8
9
10
[xdebug]
zend_extension="C:\wamp64\bin\php\php7.3.12\ext\php_xdebug-2.9.2-7.3-vc15-x86_64.dll"
xdebug.remote_enable = on
xdebug.remote_port= 9100
xdebug.remote_autostart = on
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = Off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="C:/wamp64/tmp"
xdebug.show_local_vars=0

这里有两个需要注意的地方:

  • wampserver的php.ini有两个,分别存在不同的路径中,一个是存放在apache文件夹里面的,应该是php统一的设置。另外php文件夹里面每个不同的php版本里都有一个php.ini,这里要修改的配置文件应该是apache里面的那个。

  • 前两行是开放远程监听端口,第二行是开放的端口号,如果不填默认是9000端口,这里我特意设置成了9000,因为这里实在是有点坑。最开始的时候,我用的是默认的9000端口,调试php项目的时候每次开始调试30秒左右的时候浏览器就会显示500 error,上网找了很多方法都没有用。开始以为是超时设置得太短了,打开看配置发现是300秒,可是我调试的时候半分钟就报错了。

    这里我搜了很久,终于在以”xdebug 调试时间长 500错误“为关键词之后找到了原因。有网友说,php-fpm使用的端口也是9000端口,也就是说apache把php脚本送到php-fpm是通过9000进行通信的。这样Xdebug就和php-fpm冲突了。

写好配置文件,就需要将官网提供的动态链接库文件移动到配置文件第一行对应的路径中。接着打开vscode,file-preferences-settings,打开php的settings.json,添加一行:

"php.validate.executablePath": "C:\\...\\php.exe"

填好php.exe的路径,设置好工作区文件夹,vscode自动会在目录下面生成.vscode文件夹,里面有launch.json,打开,将一下代码配置拷贝进去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9100
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9100
}
]
}

port处填自己设置好的Xdebug端口号。然后就可以开始用vscode调试php了!

这里安利一下一直在用的这款vscode主题: Github Plus,个人挺喜欢的。