xdebug调试原理

IDE(如PHPStorm)已经集成了一个遵循BGDP的XDebug插件,当开启它的时候, 会在本地开一个XDebug调试服务,监听在调试器中所设置的端口上,默认是9000,这个服务就会监听所有到9000端口的链接。

当浏览器发送一个带 XDEBUG_SESSION_START 的参数的请求到服务器时,服务器接受后将其转到后端的php处理,如果php开启了XDebug模块,则会将debug信息转发到客户端IP的IDE的调试端口上。

当参数或者cookie信息中不带 XDEBUG_SESSION_START ,则不会启动调试(相对而言,如果设置 xdebug.remote_autostart = 1 ,则不再使用特定的HTTP GET / POST变量来启动远程调试)。这就为后续在浏览器中添加开关提供了可能。

调试中基本通信说明:

1.打开浏览器,访问web页面,nginx通过fastcgi网关接口加载PHP脚本运行 (对应图上第一个朝向右的箭头)。
2.然后php解释器(当然必须已装好Xdebug扩展),向IDE端的9000端口( 本文下面用的都是9001,原因是我本机9000端口被其它程序占用)发起基于DBGP协议的调试请求。
3.IDE端收到DBGP协议请求后,就可以开始单步调试了。
4.调试完成后,服务端php解释器执行完毕,向浏览器返回response。
  • 查看PHP版本信息,确定所要下载的xdebug版本

下载后拷贝到任何目录都可以(例:D:/phpStudy/php/php-5.5.38/ext/ 中)

  • 配置php.ini文件

port可自定义,但要注意避免和当前已使用端口不冲突!

[XDebug]
;配置参考:https://segmentfault.com/a/1190000016325041
;全部配置:https://xdebug.org/docs/all_settings
;指定Xdebug扩展文件的绝对路径    
zend_extension="D:\ProgramFiles\phpStudy\php\php-7.0.12-nts\ext\php_xdebug.dll"
;启用性能检测分析    
;xdebug.profiler_enable=On  
;启用代码自动跟踪    
;xdebug.auto_trace=on  
;允许收集传递给函数的参数变量    
;xdebug.collect_params=On  
;允许收集函数调用的返回值    
;xdebug.collect_return=On  
;指定堆栈跟踪文件的存放目录    
xdebug.trace_output_dir="D:\ProgramFiles\phpStudy\tmp\xdebug"  
;指定性能分析文件的存放目录    
xdebug.profiler_output_dir="D:\ProgramFiles\phpStudy\tmp\xdebug"  
xdebug.profiler_output_name = "cachegrind.out.%p"  
;是否开启远程调试,boolean
xdebug.remote_enable = 1 
;开启后,将不再使用特定的HTTP GET / POST变量来启动远程调试
;Normally you need to use a specific HTTP GET/POST variable to start remote debugging (see Step Debugging). When this setting is set to 1, Xdebug will always attempt to start a remote debugging session and try to connect to a client, even if the GET/POST/COOKIE variable was not present.
xdebug.remote_autostart = 1
;Can only be 'dbgp' to represent the debugger protocol. The DBGp protocol is the only supported protocol.
xdebug.remote_handler = dbgp  
xdebug.remote_host = localhost  
xdebug.remote_port=9001
  • 重启php

查看phpinfo()有无加载好xdebug扩展

参考地址:
https://segmentfault.com/a/1190000016325041

配置参考:https://segmentfault.com/a/1190000016325041
官方全部配置说明:https://xdebug.org/docs/all_settings

php开启xdebug扩展及xdebug通信原理的更多相关文章

  1. php开启xdebug扩展

    1.下载Xdebug(先看php下的ext文件夹(C:\xampp\php\ext)下有没有php_xdebug.dll文件,如果有的话,就不用下了.) 到目前为止,Xdebug的最新版本为2.7.0 ...

  2. 开启php的xdebug扩展及phpstorm配置xdebug,chrome调试插件组合

    一. 开启php xdebug扩展      注意:     1. 原生php各版本需对应各自的xdebug版本,可到xdebug上对应下载     2. 若用wampserver等环境,wampse ...

  3. PhpStorm Xdebug远程调试环境搭建原理分析及问题排查

    2017年05月26日  经验心得 目录   一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...

  4. phpstudy2018 安装xdebug扩展

    第一步:查看PHP版本信息 第二步:到xdebug下载页去下载最新的版本(注意:要下载PHP对应版本) 第三步:把扩展php_xdebug-2.7.0alpha1-7.2-vc15-nts.dll放到 ...

  5. PHP7 学习笔记(三)关于PHP7如何安装调试工具Xdebug扩展以及Zephir的问题

    前言: 1.自己摸索安装 2.快速安装 安装这个扩展是由于Zephir 编译不能始终通过,迫不得已啊,使用Zephir写扩展,总是出现以下错误: www@ubuntu1:~/phalcon-zephi ...

  6. PHP安装Xdebug扩展并配置PHPstorm调试(Centos、Windows)

    一.给PHP安装Xdebug扩展 [windows] 废话不多说,直接上代码上方法安装扩展,我这里是在windows下. 首先需要确定的就是对应的PHP版本安装对应的Xdebug扩展文件,提供一个最快 ...

  7. vscode增加xdebug扩展

    首先确保php增加了xdebug扩展,方法很多,可参考 https://www.cnblogs.com/wanghaokun/p/9084188.html.可通过phpinfo()查看是否已开启支持. ...

  8. php 安装xdebug扩展

    php 扩展获取地址 http://pecl.php.net/package/ 编译安装的过程 wget http://pecl.php.net/get/xdebug-2.2.2.tgz tar -z ...

  9. PHP 安装 Xdebug 扩展(一)

    一.前言 1. Xdebug 简介 Xdebug 是一个开放源代码的 PHP 程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况.当前最新版本为 Xdebug 2.5.0 ...

随机推荐

  1. 22pygame 安装

    实战步骤 pygame 快速体验 飞机大战 实战 确认模块 --pygame pygame 就是一个 Python 模块, 专为电子游戏设计 提示 : 学习第三方模块, 通常最好的参考资料就在官方网站 ...

  2. bootstrap-table使用stickyHeader固定表头时,表头不跟随表体水平滚动问题解决

    解决方法: onAll: function () { // 修复stickyHeader表头不跟随表体水平滚动的问题 if (params.stickyHeader) { var fixedTable ...

  3. Robomongo可视化命令

    ## 更新命令示例 db.getCollection('collection_name').update(    {'_id':ObjectId('id string')},     {$set:{' ...

  4. 了解卷积神经网络如何使用TDA学习

    在我之前的文章中,我讨论了如何对卷积神经网络(CNN)学习的权重进行拓扑数据分析,以便深入了解正在学习的内容以及如何学习它. 这项工作的重要性可归纳如下: 它使我们能够了解神经网络如何执行分类任务. ...

  5. Linux下git安装配置

    一.Linux下git安装配置 2013-07-28 20:32:10|  分类: 默认分类 |  标签:linux  git  server  |举报|字号 订阅     http://abomby ...

  6. Flask 之装饰器有关

    - 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...

  7. 【leetcode】307. Range Sum Query - Mutable

    题目如下: 解题思路:就三个字-线段树.这个题目是线段树用法最经典的场景. 代码如下: class NumArray(object): def __init__(self, nums): " ...

  8. 如何将DynamoDB的数据增量迁移到表格存储

    Amazon DynamoDB是一个完全托管的NoSQL数据库服务,可以提供快速的.可预期的性能,并且可以实现无缝扩展.由于DynamoDB并可以根据实际需求对表进行扩展和收缩,这个过程既不需要停止对 ...

  9. Mac终端的Cocoapods创建自己的私有库和公有库

    一,前言 为什么要用Cocopods 通常在开发的过程中,大多时候,我们会处理一类相同的操作,比如对于字符串String的邮箱验证,是否为空,手机号验证,或者一些UIView的动画操作,我们为了避免写 ...

  10. asp.net开发微信公众平台----目录汇总-持续更新

    1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...