Visual Studio Code 调试 PHP

2018/12/4 更新

Nginx + php-cgi.exe 下与 Visual Studio Code 配合调试

必需环境
  1. Visual Stduio Code
  2. PHP
  3. XDebug Application Library(dll)
  4. Web服务器 IIS(参考环境 Win10)
第一步基本道理

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

第二步安装
  1. Visual Studio Code默认安装即可,安装插件PHP Debug
  2. PHP默认安装即可
  3. 下载 XDebug,下载时注意版本的选择,下载后是一个 DLL 文件
  4. IIS服务器默认安装运行即可
第三步配置
  1. 确认 Visual Studio Code 安装并启用了PHP Debug插件
  2. 开启PHP本身的ini配置文件,并在Dynamic Extension块中新增表示 XDebug 的块,内容为:
[xdebug]
zend_extension = "php_xdebug-2.7.0beta1-7.2-vc15-nts-x86_64.dll"
xdebug.remote_enable = On
xdebug.remote_autostart = On

zend_extension 是下载的 XDebug 动态连接文件的地址,其值可以是相对地址或绝对地址。此处默认将dll文件放到了PHP安装目录下的 ext 路径下,因此地址是相对路径。

  1. XDebug本身没有可配置的地方
  2. IIS服务器配置好和PHP的关系即可
第四步试用
  1. 对要调试的PHP文件打上断点

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

  3. 选择后可以看到其配置文件,通常无需更改其内容

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

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

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 后一样可以。

Visual Studio Code 调试 PHP的更多相关文章

  1. Visual Studio Code调试node.js:无法在PATH上找到运行时的node

    首先,环境变量Path中加入nodejs的路径: 验证nodejs是否已经加入环境变量: 接着,重新启动Visual Studio Code, 试一下,是不是好了~   附录:Visual Studi ...

  2. Visual Studio Code调试electron主进程

    Visual Studio Code调试electron主进程 作者: jekkay 分类: electron 发布时间: 2017-06-11 14:56  一·概述 此文原出自[水滴石]: htt ...

  3. windows下用visual studio code 调试go代码

    http://www.golangtc.com/download下载安装包或压缩包 配置环境变量 配置GOROOT: 配置PATH:在PATH最后添加 配置GOPATH:GOPATH的作用请自行百度, ...

  4. 用 Visual Studio Code 调试 Node.js

    环境: Visual Studio Code  Node.js 1. 关闭运行中的程序 2.打开入口文件,我这里的入口文件为 app.js 3.点击左侧菜单栏的 debug 按钮 4.点击运行按钮 5 ...

  5. 使用Visual Studio Code调试基于ActionScript的LayaAir HTML5游戏

    使用Visual Studio Code(VS Code)调试的优势 使用VS Code我们可以极大地提高LayaAir Html5游戏项目的调试效率,VS Code的优势有以下几点: 在发生Java ...

  6. visual studio code 调试nodejs 配置简单HTTP服务器

    介绍 Visual Studio Code是一个轻量级的Web集成开发环境on Linux,Mac and Windows,特别是作为前端人员来了, 多了一个可供选择的生产力工具IDE,调试js代码简 ...

  7. Go学习笔记(二)搭建Visual Studio Code调试环境

    上一篇 Go学习笔记(一)安装Go语言环境 安装Visual Studio Code 这是目前我觉得最好用的文本编辑器了, https://code.visualstudio.com/ 中间有几部确认 ...

  8. 使用visual studio code调试php代码

    这回使用visual studio code折腾php代码的调试,又是一顿折腾,无论如何都进不了断点.好在就要放弃使用visual studio code工具的时候,折腾好了,汗~ 这里把步骤记录下来 ...

  9. 如何使用Visual Studio Code调试PHP CLI应用和Web应用

    在按照Jerry的公众号文章 什么?在SAP中国研究院里还需要会PHP开发? 进行XDebug在本地的配置之后,如果想使用Visual Studio Code而不是Eclipse来调试PHP应用,步骤 ...

随机推荐

  1. button作用类似于submit

    不想提交,可使用以下 <a href="javascript:;" >修改</a>

  2. radio单选框

    1.写 <!DOCTYPE html> <html> <head> <title></title> <script language= ...

  3. Android内核的编译与测试

    1.下载Android内核 source.android.com/source->Downloading and Building Building Kernels 大概要花2个小时,其源码在培 ...

  4. ZOJ3704 I am Nexus Master! 2017-04-06 23:36 56人阅读 评论(0) 收藏

    I am Nexus Master! Time Limit: 2 Seconds      Memory Limit: 65536 KB NexusHD.org is a popular PT (Pr ...

  5. java并发编程实战:第十六章----Java内存模型

    一.什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺 ...

  6. OpenGL中的像素包装理解

    OpenGL中的像素包装理解 像素包装 位图和像素图很少会被紧密包装到内存中.在许多硬件平台上,考虑到性能的原因位图和像素图的每一行的数据会从特殊的字节对齐地址开始.绝大多数编译 器会自动把变量和缓冲 ...

  7. 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  8. [label][JavaScript][The Defined Guide of JavaScript] 如何声明变量

    因为觉得我自己的JavaScript基础很不扎实,或者可以说根本就没有所谓基础,所以就最近一直在看<The Defined Guide of JavaScript> . 在一边看的同时,我 ...

  9. 微信公众开发URL和token填写详解

    微信公众开发URL和token填写详解 方法/步骤     作为一名微信公众号开发者,别人进入你的微信公众号,肯定会看见某些网页,或者给你发某些信息,你需要实时自动回复,所以你需要一个24小时为用户服 ...

  10. [Erlang26]怎么通过beam文件得到所有的record或源代码?

    怎么通过beam文件得到所有的record或源代码?   1. 首先必须要在compile里面加上debug_info信息: 1 > c(load,[debug_info]). {ok,load ...