对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了。不像JAVA,打开一个Eclipse就可以开搞,Php的Debug都要几个插件来配合工作。这些都是死的,好说。但是对于Xdebug的工作原理我一直是耿耿于怀,后来看了一篇神文Xdebug断点调试的工作原理详解

Xdebug的工作原理可以总结为下面几个步骤

1)IDE(比如PhpStorm,下文所述的客户端)中已经集成了一个遵循BGDp协议(一个专门用来调试的协议)的Xdebug插件。当要debug的时候,点击一些IDE的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug信息。

2)浏览器向Httpd服务器发送一个带有XDEBUG_SESSION_START参数的请求,Httpd收到这个请求之后交给后端的PHP进行处理(下面就忽略Httpd,直接把Php叫做Server)。

3)Php看到这个请求是带了XDEBUG_SESSION_START 参数,就告诉Xdebug,“嘿,我要debug喔,你准备一下”。这时,Xdebug这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug请求,然后客户端的9000端口响应这个请求,那么debug就开始了。

4)Php知道Xdebug已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让Xdebug过滤一下。

5)Xdebug开始过滤代码,Xdebug在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的9000端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)。

6)相应,客户端(IDE)收到Xdebug发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向Xdebug发送下一步应该什么。

1下载对应版本的xdebug

xdebug官网下载地址:https://xdebug.org/download.php

你需要仔细分析和选择要下载的对应版本,否则无法调试。由于非常容易出错,建议采用下面这种简单方法:

xdebug网站提供一个自动分析你系统对应的xdebug版本的页面,网址是  https://xdebug.org/wizard.php

图1-1 xdebug网站提供的一个自动分析系统对应xdebug版本的页面

在页面中需要粘贴进去php版本信息,也就是phpinfo()函数的信息,如下图:

图1-2 phpinfo();函数返回的信息

ctrl+A全选这个页面的信息,然后粘贴到第一个图片的页面中。

不知道这个页面如何出现的同学在你的php服务器程序目录下 创建一个phpinfo.php文件,只需一行代码

<?php  phpinfo(); ?>

浏览器中输入 http://127.0.0.1/phpinfo.php 就出现图2 中的页面了。

图1-3 向页面中拷贝phpinfo()获取的信息

点击 analyse my phpinfo() output 按钮

图1-4 找到你需要下载的xdebug版本

将下载的DLL文件拷贝到指定目录,按照页面上的提示即可
 

图1-5 下载后拷贝到指定目录,并在对应的php.ini中末尾处添加图中第3小点的内容

到此为止,xdebug的下载和启用就完成了,重新运行 phpinfo.php 文件,在打开的页面中出现图1-6则说明安装正确:

注意问题

1phpinfo.php需要启动服务器后,通过浏览器访问。

2 php.ini文件中增加的行,等号前后有空格,字符串值可以有引号也可以没有引号。

zend_extension = C:\laragon\bin\php\php-7.1.7-Win32-VC14-x64\ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll

zend_extension = "C:\laragon\bin\php\php-7.1.7-Win32-VC14-x64\ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll"

(这是我本机地址,这里建议直接拷贝图1-5中网页给出的值)

2phpstorm中使用xdebug

2.1修改php配置文件

1 php服务器在本地的情况。

在php.ini文件的末尾处追加如下代码:

;xdebug库文件
zend_extension = "C:\laragon\bin\php\php-7.1.7-Win32-VC14-x64\ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll"
;开启远程调试
xdebug.remote_enable = On
;客户机ip
xdebug.remote_host="127.0.0.1"
;客户机xdebug监听端口和调试协议
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
;idekey 区分大小写
xdebug.idekey="PHPSTORM"
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
;idekey 区分大小写
xdebug.profiler_output_dir = "d:\tmp"

图2-1图中标红的地方因不同主机而不同,请注意

2 PHP服务器不是本机

这种情况我还没有试过,以后再补充,大家有做过的可以给我留言。

2.2 phpstorm中的配置

(1)在文件->设置->语言与框架中->PHP->debug 设置端口,端口默认为9000,由于经常会被其他程序占用,这里建议设置为9001
图2-2 修改调试端口
 
(2)在DBGp Proxy中配置你的idekey,idekey就是你在配置文件中最后一项,host是你的服务器ip或者是已经可以解析的域名,port可以自选,一般默认选80就好了
 
图2-3修改调试协议DBGp的配置
 
(3)自己手动添加一个,Host填服务器ip,然后port是默认80端口,如果你修改过,你可以更改成你设置的web端口,debug选xdebug
图2-4 创建一个本地调试服务器
 
(4)测试一下配置是否成功
 
图2-4 创建一个调试服务器,用于与真正服务器同步
 
(5)测试成功
 
图2-5 配置成功
第一个红线是你的工程在服务器上的地址
第二条红线是你的工程的网络地址(最后的斜杠有木有都可以)
 
 

3调试使用

(1)新建一个运行调试配置

图3-1创建一个调试配置

点击“+”,创建一个 PHP Web Application的配置,右侧输入一个用于记忆的名称,选择服务器

(2)打开IDE的debug监听

图3-2 图中为关闭状态,单击后为打开状态

(3)开始调试

图3-3 断点生效

红色圆中有个对号,是说明改断点生效了

几点注意

(1)Apache服务器默认的端口是80,按照上面设置就可以了,Nginx默认是8080有URL的地方需要调整一下。URL的组成结构中包括端口号,只是默认值是80,很多时候省略了。

(2)遇到问题仔细分析一下,都是可以解决的,如果实在有困难,可以在评论区留言。

4调试的意义

调试对于PHP开发的真正意义,后续补充。
 

5参考资料

1 phpStorm+XDebug进行断点调试的配置

http://www.chenxuanyi.cn/xampp-phpstorm-xdebug.html

2利用下面网页中的Start debug按钮在COOKIE中设置Xdebug所需的变量。

http://www.jetbrains.com/phpstorm/marklets/

3 Cannot accept external Xdebug connection:Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])

http://devnet.jetbrains.com/message/5463083?tstart=0

4Xdebug调试原理

http://my.oschina.net/atanl/blog/371424

phpstorm+xdebug调试详细教程的更多相关文章

  1. 使用zend studio配置Xdebug调试PHP教程

    这里看过上面的文章后写一下自己的想法. 最近安装了zend studio 10.5,下载了破解文件.开始是下载了10.0的版本,但是注册码不正确.所以只能安装最新的10.5了. 接下来进行PHP代码调 ...

  2. ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-

    在ROS industrial介绍中,给出了ROS和常用机械臂的连接方式.具体信息可以参考:http://wiki.ros.org/Industrial ROS连接ABB机械臂调试详细教程-ROS(i ...

  3. PHPStorm + Xdebug 调试PHP代码 有大用

    星期四, 12/26/2013 - 19:54 - shipingzhong PHPStorm + Xdebug 调试PHP代码 http://e.v-get.com/2013-11-20 16:55 ...

  4. PhpStorm+xdebug调试——更新

    之前写过一篇<PhpStorm+xdebug+postman调试>,但是经过后来一段时间的使用,发现有些累赘.这里介绍一种比较简单方便的操作. 在上一篇文章中有一段“ 7.设置Server ...

  5. macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码

    0x00 描述 宿主机是 mac mini,构建的项目在 docker 中,所以需要在 PHPStorm 上配置 Xdebug 进行远程代码调试. 0x01 环境 宿主机:macOS High Sie ...

  6. PHPStorm+XDEBUG 调试Laravel

    首先输出phpinfo(); https://xdebug.org/wizard.php 打开然后查看适合你的调试扩展版本 ,目前支持到php7.2 整个页面ctrl+a  复制进去 然后下载 扩展文 ...

  7. phpstorm 断点调试 傻瓜教程

    前言: 简单介绍下为什么要用断点调试,很多人说我在代码调试的部位用var_dump 或者 exit 或者print_r来进行断点,但是当项目足够大的时候这样的做法就比较费时费力,因为你断点后需要删除原 ...

  8. phpstorm xdebug调试设置样式

    由于本人比较喜欢白底的phpstorm开发环境,所以XDEBUG断点调试,F8时默认是没有背景色的,phpstorm中的设置方式如下 files -> settings -> Editor ...

  9. phpstorm+xdebug调试代码

    1工具 #phpstorm 前面有文章介绍如何安装 #phpStudy 官网下的2018最新的安装包,php环境使用的也是最新的php7.0nts 2开启php Xdebug拓展 开启拓展,phpSt ...

随机推荐

  1. 攻防世界之Web_PHP2

    题目: 扫描目录发现index.phps,进入查看发现源码. 代码审计:GET传一个id,id通过url解码后为admin,所以传?id=admin 通过url加密两次的值 使用burpsuite编码 ...

  2. 【01】Maven依赖插件之maven-dependency-plugin

    一.插件目标(goal) 1.analyze:分析项目依赖,确定哪些是已使用已声明的,哪些是已使用未声明的,哪些是未使用已声明的 2.analyze-dep-mgt:分析项目依赖,列出已解析的依赖项与 ...

  3. 为什么在数据驱动的路上,AB 实验值得信赖?

    在线AB实验成为当今互联网公司中必不可少的数据驱动的工具,很多公司把自己的应用来做一次AB实验作为数据驱动的试金石. 文 | 松宝 来自 字节跳动数据平台团队增长平台 在线AB实验成为当今互联网公司中 ...

  4. Dell服务器通过IDRAC9收集TSR日志排查故障

    登陆IDRAC9 WEB管理界面,在菜单栏< 维护>下选择  在联网的情况下推荐完成SupportAssist的注册,根据提示安装ISM并进行信息登记.如暂不注册,则点击取消继续. 进入S ...

  5. 【硬件基础知识】指令集框架(ISA:Instruction Set Architecture)

    指令框架(ISA:Instruction Set Architecture) 定义 指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系, ...

  6. C# 逆变(Contravariance)/协变(Covariance) - 个人的理解

    逆变(Contravariance)/协变(Covariance) 1. 基本概念 官方: 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始 ...

  7. 积分图(二) - Block - Match(统计)滤波器

    原文地址(英文) 积分图 是 [Crow(1984 年)] 提出的用于提高多尺度透视投影中纹理的渲染速度的一种技术. 积分图最流行的应用是 快速归一化互相关 (fast normalized cros ...

  8. ComboBox控件绑定数据源后,添加'请选择'或'全部'

    ComboBox控件绑定数据源后,添加'请选择'或'全部' 当使用ComboBox控件绑定数据源之后,通过Items 属性添加的数据是无效的,此时如果要在所有选项前添加 选项 ,则需要考虑从数据源下手 ...

  9. PHP高并发商城秒杀

    1.什么是秒杀 秒杀活动是一些购物平台推出的集中人气的活动,一般商品数量很少,价格很便宜,限定开始购买的时间,会在以秒为单位的时间内被购买一空.比如原价千元甚至万元的商品以一元的价格出售,但数量只有一 ...

  10. Kubernetes系列(五) Ingress

    作者: LemonNan 原文地址: https://juejin.im/post/6878269825639317517 Kubernetes 系列 Kubernetes系列(一) Pod Kube ...