使用Xdebug的远程调试,Xdebug作为一个嵌入到PHP的程序,扮演着客户端的角色,而IDE则作为服务器。下面的动态图展示了连接建立的过程。
- 服务端的IP为10.0.1.2, 使用HTTP协议,端口为80
- IDE在IP地址为10.0.1.42的机器上,
xdebug.remote_host
被设置为10.0.1.42 - IDE监听9000端口,因此,
xdebug.remote_port
设置为9000 - HTTP请求从运行这IDE的服务器上发起
- Xdebug连接到10.0.1.42:9000
- 调试开始运行,返回HTTP响应
使用非固定IP,多个开发者
如果使用了xdebug.remote_connect_back
指令的话,连接的建立过程是不同的:
- 服务端的IP是10.0.1.2, 端口为80
- IDE运行在一个动态IP的计算机上,因此设置
xdebug.remote_connect_back
为1 - IDE监听端口 9000, 因此,配置
xdebug.remote_port
为9000 - 发送HTTP请求,Xdebug检测HTTP header中的IP地址
- 调试开始运行,产生HTTP响应
多用户调试
Xdebug只允许你使用指定的IP地址(xdebug.remote_host
)进行远程调试连接.他不会自动的连接回浏览器运行访问的机器IP,除非你是用xdebug.remote_connect_back
指令。
如果你的开发者们在同一个服务器上的不同的项目上面进行开发,你可以使用Apache的每个目录中的.htaccess
功能指定xdebug.remote_host
指令,配置php_value xdebug.remote_host=10.0.0.5
。 但是,如果是多个开发者在同样的代码上进行开发的话,.htaccess
将无法完成该项功能。
针对这个问题,这里有两个解决方案。第一个是你可以使用DGBp代理,对于如何使用这个代理,请查看多用户调试这篇文章。你可以在 ActiveState的站点 下载这个代理。这里有更多的文档在Komodo FAQ.
第二个方案是可以使用xdebug.remote_connect_back
配置项(Xdebug 2.1之后引入)。
更多参考:
下面用图说明Netbeans+Xdebug调试过程中,Xdebug扮演着客户端的角色,而IDE则作为服务器
而Xdebug完或结束调试后,Xdebug才把php处理结果交给apache,apache通过页面形式展示给用户,可以通过tail -f access.log验证。debug结束前无access日志,结束后产生相应access日志。
特别说明:
netbeans+xdebug单步调试遇PHP致命错误终止执行,单点调试也会随即停掉