NetBeans+Xdebug调试原理

使用Xdebug的远程调试,Xdebug做为一个嵌入到PHP的程序,扮演着客户端的角色,而IDE则做为服务器。下面的动态图展现了链接创建的过程。php

链接创建过程

  • 服务端的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指令的话,链接的创建过程是不一样的:html

链接创建过程

  • 服务端的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

若是你的开发者们在同一个服务器上的不一样的项目上面进行开发,你能够使用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以后引入)。ide

更多参考:spa

https://blog.csdn.net/21aspnet/article/details/47756651.net

 

下面用图说明Netbeans+Xdebug调试过程当中,Xdebug扮演着客户端的角色,而IDE则做为服务器debug



而Xdebug完或结束调试后,Xdebug才把php处理结果交给apache,apache经过页面形式展现给用户,能够经过tail -f access.log验证。debug结束前无access日志,结束后产生相应access日志。

 

特别说明:代理

netbeans+xdebug单步调试遇PHP致命错误终止执行,单点调试也会随即停掉
相关文章
相关标签/搜索