xdebug调试的原理
转自
https://segmentfault.com/a/1190000002528341
使用PhpStorm+xdebug单步调试程序可以快速帮助自己熟悉项目代码!
运行原理
在实际使用前,我们来简单了解xdebug远程调试的原理,这样当xdebug不听话的时候,我们也知道从哪里收拾它。详细文档参见此处。
xdebug远程调试分为两部分:调试客户端和xdebug服务端。前者就是运行我们代码调试器的地方,我这里是IDEA,后者是xdebug运行的地方。当我们尝试使用xdebug进行调试时,客户端会监听一个端口,等待xdebug来连接,一旦连接成功,双方就开始通信,进行代码调试。

图一,源图
图一动态展示了xdebug运行的原理,左边是调试客户端,比如IDEA、eclipse之类的IDE,右边是xdebug,运行按照如下步骤进行:
-
IDE监听一个调试端口,默认是9000,可以自行配置。 -
用户访问右边php环境的server,我们这里使用浏览器访问,一般
IDE会自动帮我们在正常的url后面增加XDEBUG_SESSION_START=name的参数。这个参数是用来通知xdebug主动连接IDE的9000端口进行调试的,没有这个参数,xdebug不会去主动连接IDE,调试也就不会触发。 -
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来连接。

浙公网安备 33010602011771号