转自
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
来连接。