转自

https://segmentfault.com/a/1190000002528341

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

运行原理

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

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

图一,源图

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

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

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

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

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

另一个问题又来了,端口好办,但是如果我的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. APP微信登录 服务器处理代码

    采用框架THINKPHP5 需要客户端传的参数有  udid openid nickname avatar_path /* * @param 第三方微信登录 * @param openid udid ...

  2. 云计算下的企业IT运维

    云计算管理员们一般都工作在一个分布式局域网计算基础设施中,它与传统数据中心最大的区别之一就是,所有被存储.调配和管理的数据都在一个私有云中.基于云计算的高效工作负载监控可在性能发生问题之前就提前发现这 ...

  3. linux实操_组管理

    1.文件/目录的所有者 一般为文件的创建者,谁创建了该文件,就自然成为该文件的所有者. 查看文件的所有者: 指令:ls -ahl 修改文件所有者: 指令:chown 用户名 文件名 组的创建: 指令: ...

  4. eclipse p2更新官网wiki的例子

    官网的cvs好像没了,不过在github上找到一份,可用. https://github.com/anthonydahanne/make-p2-buildable-with-tycho/tree/ma ...

  5. [SaSS] Using Object like style to create class dynamiclly

    $black: #; $white: #fff; $yellow: #ffe183; $dark-red: #e70404; $dark-green: #0d8268; $cloud-blue: #d ...

  6. Node.js 调试小技巧

    小技巧--使用 supervisor如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一 ...

  7. 7.26T3小游戏

    小游戏 题目描述 有一个简单的小游戏.游戏的主人公是一个勇士,他要穿过一片黑森林,去 解救公主.黑森林的地图可以用一张 V 个点.E 条边的无向图来描述,起点是 1 号点,终点是 V 号点.勇士从起点 ...

  8. 字典-Python基础前传(9)

    (一)Python中为什么要有字典 jacky说科学存在的逻辑只有两个: 1.解释问题 2.解决问题 我们明白了科学的逻辑,我们理解任何的知识和技能,都是很简单的 之前jacky跟大家说list因为太 ...

  9. java.security.InvalidKeyException: Illegal key size or default parameters

    今天在使用idea打包maven项目时,出现这个错误:java.security.InvalidKeyException: Illegal key size or default parameters ...

  10. Python __dict__和vars()

    1 __dict__ 设想这样一个场景.有一个字典,从某个地方获取的,比如http请求发过来的,比如从redis中hgetall出来的.我要根据这个字典来构建一个对象. 比如类 class Perso ...