转自

https://segmentfault.com/a/1190000002528341

使用PhpStorm+xdebug单步调试程序可以快速帮助自己熟悉项目代码!

运行原理

在实际使用前,我们来简单了解xdebug远程调试的原理,这样当xdebug不听话的时候,我们也知道从哪里收拾它。详细文档参见此处。

xdebug远程调试分为两部分:调试客户端和xdebug服务端。前者就是运行我们代码调试器的地方,我这里是IDEA,后者是xdebug运行的地方。当我们尝试使用xdebug进行调试时,客户端会监听一个端口,等待xdebug来连接,一旦连接成功,双方就开始通信,进行代码调试。

图一,源图

图一动态展示了xdebug运行的原理,左边是调试客户端,比如IDEA、eclipse之类的IDE,右边是xdebug,运行按照如下步骤进行:

  1. IDE监听一个调试端口,默认是9000,可以自行配置。

  2. 用户访问右边php环境的server,我们这里使用浏览器访问,一般IDE会自动帮我们在正常的url后面增加XDEBUG_SESSION_START=name的参数。这个参数是用来通知xdebug主动连接IDE的9000端口进行调试的,没有这个参数,xdebug不会去主动连接IDE,调试也就不会触发。

  3. xdebug主动去连接IDE的9000端口, 连接成功后,调试开始。

细心的同学可能会问,xdebug是如何知道IDE监听9000端口的呢?好问题,答案就在配置文件里面。xdebug有两个配置:remote_host和remote_port,分别代表IDE的ip地址和监听端口。由此可见,IDE和xdebug必须协商好监听端口。

另一个问题又来了,端口好办,但是如果我的ip会变化,那我换一个ip,岂不是要修改下xdebug.remote_host配置吗?好麻烦!!!不知道ip没关系,xdebug可以自己知道,只要设置xdebug.remote_connect_back为1就可以了,其运行原理见图二,实现很简单,xdebug可以从http请求的头部获取ip地址,之后就用该ip地址作为remote_host来连接。

xdebug调试的原理的更多相关文章

  1. NetBeans+Xdebug调试原理

    使用Xdebug的远程调试,Xdebug作为一个嵌入到PHP的程序,扮演着客户端的角色,而IDE则作为服务器.下面的动态图展示了连接建立的过程. 服务端的IP为10.0.1.2, 使用HTTP协议,端 ...

  2. PhpStorm中配置xdebug调试环境

    1. 安装xdebug 第一步: 得到本地PHP配置信息 在终端中运行: php -i > outputphp.txt 然后将得到的txt文件中的信息拷贝并复制到http://xdebug.or ...

  3. NetBeans+Xdebug调试php代码

    本文目录 : Xdebug的工作原理 Xdebug扩展的配置 NetBeans的配置 调试实例 本文小结 参考文档 Xdebug:是PHP的调试器和分析器(Debugger and Profiler ...

  4. Atitit web remote远程调试的原理attilax总结

    Atitit web remote远程调试的原理attilax总结 Jvm是vm打开一个debug port,然后ide先连接..然后执行url,就会vm会与ide沟通.. Php的xdebug po ...

  5. Mac: phpstorm中使用xdebug调试php

    Mac: phpstorm中使用xdebug调试php###phpstorm和webserver都在同一台机器上这种情况1.安装xdebug使用pecl安装即可2.php.ini配置[xdebug]z ...

  6. phpstorm+xdebug调试详细教程

    对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了.不像JAVA,打开一个Eclipse就可以开搞,Php的Debug都要几个插件来配合工作.这些都是死的,好说.但是对于Xdebug ...

  7. 用netbeans和xdebug调试php的配置

    xdebug的chrome.firefox插件 chrome:Xdebug helper firefox:easy Xdebug ----------------------------------- ...

  8. zend stuido 12.5的插件安装和xdebug调试器的配置和和配置注意

    参考: zend stuido 12.5的插件安装 zend 12.5 安装插件是按类别进行分类了的, 而且是在欢迎 界面就可以直接安装, 安装后,要重启zend才能生效 版式设计的一个基本点就是: ...

  9. 关于用netbeans和xdebug调试php的配置

    之前用过一段时间在apache,netbeans下通过xdebug调试.感觉不错,最近事情不多想从新配置下,是基于最新版本的php5.4做的,后来参考了下xdebug的官网说明完成的.官网地址:htt ...

随机推荐

  1. 复杂sql书写方法

    给你一个复杂sql连接不同的表,多个嵌套查询条件等的语句时,你是非常的胆怯由于对语法的不熟悉以及没有经验和自信,现在我们来学习一下如何写复杂的sql,我们把它分解为很多小的步骤进行 一.集中最后的输出 ...

  2. string的 insert

    // inserting into a string #include <iostream> #include <string> int main () { std::stri ...

  3. XSS攻击(跨站攻击)

    漏洞描述 跨站脚本攻击(Cross-site scripting,简称XSS攻击),通常发生在客户端,可被用于进行隐私窃取.钓鱼欺骗.密码偷取.恶意代码传播等攻击行为.XSS攻击使用到的技术主要为HT ...

  4. linux实操_shell运算符

    1."$((运算式))"或"[运算式]" 2.expr m + n 注意:expr运算符要有空格 3.expr m - n 4.expr \*,/,/% 乘,除 ...

  5. 一款超好用的第三方评论插件--Gittalk

    使用GITALK的背景: 1. 最近在做一个基于Java的个人博客系统,已经基本完工了,突然发现怎么没有评论的操作,如果再从头开始从数据库开始写的话,花费的代价有点大,于是乎我就在网上寻找一款适合我的 ...

  6. HTMl5的存储方式sessionStorage和localStorage区别及联系

    localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据. localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手 ...

  7. Math.cbrt() Math.sqrt() Math.pow()

    Math.pow() 能实现 Math.cbrt() 和 Math.sqrt() 的功能,但并不完全相同. 1. Math.pow()和Math.cbrt()的区别 function isCube(m ...

  8. learning express step(十二)

    learning express view engine function const express = require('express'); const app = express(); app ...

  9. dubbo——高可用性

    一.zookeeper宕机 zookeeper注册中心宕机,还可以消费dubbo暴露的服务 健壮性: 监控中心宕掉不影响使用,只是丢失部分采样数据 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询, ...

  10. c 判断是否为nan

    /* isnan example */ #include <stdio.h> /* printf */ #include <math.h> /* isnan, sqrt */ ...