2021-11-04
更新解决因端口配置错误导致vscode接收不到调试请求无法调试的问题

2018/12/4 更新
Nginx + php-cgi.exe 下与 Visual Studio Code 配合调试

必需环境

  1. Visual Stduio Code
  2. PHP(当前版本8.0.7)
  3. XDebug Application Library(dll)(ver3.0.4)
  4. Web服务器 IIS(参考环境 Win10)

基本道理

Web服务器用来运行Http请求,PHP接收IIS调用运行PHP请求,XDebug截获运行,传递到VS Code——以上为个人理解

安装

  1. Visual Studio Code默认安装即可,安装插件PHP Debug
  2. PHP默认安装即可
  3. 下载 XDebug,下载时注意版本的选择,如不知应下载哪种版本可以将 phpinfo() 的输出粘贴到网站自动识别。下载后是一个 DLL 文件,保存在PHP扩展目录,windows下是 /ext
  4. IIS服务器默认安装运行,配置好与PHP的FastCgi即可

配置

  1. 确认 Visual Studio Code 安装并启用了PHP Debug插件
  2. 开启PHP本身的ini配置文件,并在Dynamic Extension块中(一般是整个文本最后)新增 XDebug 的块,内容为:
[xdebug]
zend_extension = "php_xdebug-3.0.4-8.0-vs16-nts-x86_64.dll"
xdebug.client_port = 9000
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.mode=debug
xdebug.start_with_request=yes

zend_extension 是下载的 XDebug 动态连接文件的地址,其值可以是相对地址或绝对地址。此处默认将dll文件放到了PHP安装目录下的 ext 路径下,因此地址是相对路径。client_port是PHP监听的端口,web服务器将PHP请求发送到此端口由PHP监听程序接收并交给内核编译执行,因此client_port要与vscode中调试配置文件的端口设定保持一样。下图为vscode中的调试配置文件片段
Visual Studio Code 调试 PHP
3. XDebug本身没有可配置的地方
4. IIS服务器配置好和PHP的关系即可

开启调试

  1. 对要调试的PHP文件打上断点
    Visual Studio Code 调试 PHP

  2. 点击 VS Code 左侧工具栏上的 Debug|调试 按钮,在顶部选择框中选择 Listen for XDebug(或新增一个配置)
    Visual Studio Code 调试 PHP

  3. 选择后可以看到其配置文件,通常无需更改其内容
    Visual Studio Code 调试 PHP

  4. F5 启动调试,按下后 VS Code 界面可以看到顶部多了一个调试工具栏
    Visual Studio Code 调试 PHP

  5. 在浏览器中运行要调试的地址,配置无误的话将在运行到断点时切换回 VS Code,此时可以看到程序停在断点处,可以使用 F10F11快捷键向下继续运行,鼠标悬停在变量处也可以查看到变量值
    Visual Studio Code 调试 PHP

2018/12/4 更新

Nginx 和 php-cgi 的配合

当不使用 IIS 作为服务器时,可以使用这两个家伙的组合。Nginx 的启动使用快捷方式,无需参数,如下

d:\applications\nginx\nginx.exe

检查 PHP 要使用的配置文件中,有关 XDebug 的配置与即将运行的 PHP 是否一致,例如配置文件中如果 xdebug.remote_port = 8000 而 php 监听的是默认 9000 端口,就会无法截获调试信息。当前 PHP 配置文件使用“指定的php-dev.ini”,端口默认9000,在Windowns环境下写了一个bat用来启动和关闭,如下

@echo off
echo Starting PHP FastCGI...
d:\applications\php\php-cgi.exe -b 127.0.0.1:9000 -c d:\applications\php\php-dev.ini

启动后 Nginx 没有界面,在后台运行,PHP有一个Console窗口不可关闭。检查 VS Code 中配置是否正确,点击左侧工具栏 Debug 按钮,选择调试界面中要使用的配置文件,可以点击 齿轮 按钮查看配置文件中配置是否符合当前环境(如第四步试用中内容)。如配置无误,如 第四步试用 中描述,即可截获调试内容。

小心!

  1. 核对 PHP 的配置文件,默认端口号是否改变,如果 PHP 自身运行端口改变,调试信息需要跟着变,建议保留默认的 9000
  2. 核对 PHP 配置文件中 XDebug 部分,如果特殊需要,只填写最少的 zend_extensionxdebug_remote_enablexdebug_remote_autostart 三个就行,这样未设置的部分就会按照默认进行,如会监听默认9000端口。今天就踩了个小坑,配合 PHPSTORM 调试时,XDebug 部分修改了端口为 9009,导致运行时 VS Code 截获不到调试信息。修改为只剩三个配置项时,成功。
  3. 冷静细致,php 配置文件、配置文件中 XDebug 部分、VS Code 调试配置(launch.json)三大位的内容要能配合得上,尤其是端口号,才能成功。
  4. 发现,网上 N 多文章说的浏览器需要安装插件似乎不是“必需”的,调试时使用 QQ 浏览器,未安装或禁用了 Xdebug Helper 后一样可以。

相关文章: