php – Xdebug无法连接到客户端,我在哪里开始调试调试器?

我在sublime文本中为php设置xdebug,xdebug继续记录与无法连接相关的错误:

Log opened at 2016-08-18 21:06:01
I: Connecting to configured address/port: localhost:9988.
E: Could not connect to client. :-(
Log closed at 2016-08-18 21:06:01

我希望通过在我的浏览器中访问http:// localhost:9988来直接调试可能有所帮助,但它只是显示谷歌浏览器错误页面:“localhost拒绝连接”.也许错误存在于另一端,那个数据无法推送到sublime文本客户端,我不知道. Sublime文本xdebug确实在我运行tests / etc时显示消息“Reloading /var/log/xdebug/xdebug.log”,所以它似乎知道正在运行的php代码,只是没有得到任何进一步.

所以,我从未想过我必须调试xdebug本身,但是:我如何调试xdebug到代码编辑器连接?如果这是nginx,我会开始调试虚拟主机,但因为它是xdebug ……我不知道从哪里开始调试缺少连接的应用程序?

##各种配置设置##

我在ubuntu linux 14.04上.

这是我的xdebug.ini conf,如果相关:

[xdebug]
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp"
xdebug.remote_port=9988
xdebug.remote_mode = req
xdebug.overload_var_dump=0
xdebug.idekey = sublime.xdebug
xdebug.remote_log="/var/log/xdebug/xdebug.log"
;https://github.com/martomo/SublimeTextXdebug

Xdebug安装:

apt-cache policy php-xdebug
php-xdebug:
  Installed: 2.4.0-5+donate.sury.org~trusty+1
  Candidate: 2.4.0-5+donate.sury.org~trusty+1
  Version table:
 *** 2.4.0-5+donate.sury.org~trusty+1 0
        500 http://ppa.launchpad.net/ondrej/php/ubuntu/ trusty/main amd64 Packages
        100 /var/lib/dpkg/status

模块有效:

php -m | grep -i xdebug
xdebug
Xdebug

phpinfo xdebug设置:

php  –  Xdebug无法连接到客户端,我在哪里开始调试调试器?

解决方法:

PHP调试需要两个协作的组件:一个充当服务器的PHP扩展和一个知道如何与此扩展通信并驱动其功能的软件(它是客户端).

但是,尽管客户端连接到服务器的客户端服务器协议很常见,但PHP调试器的工作原理是相反的:服务器是连接到客户端的服务器(应该在端口9000上启动和监听).

xdebug是最着名的调试PHP扩展.有许多程序和程序扩展/插件充当它的客户端.我没有使用Sublime的Xdebug包(我首先没有使用Sublime)但原则是相同的.

调试会话如何工作?

客户端软件(在您的情况下使用Xdebug包进行Sublime)开始侦听localhost的端口9000,等待服务器启动连接.它可能不会一直在端口上监听,而只是在开发人员这样说的时候.

您启动PHP脚本进行调试. xdebug不会启动对服务器的所有请求,只有当它在请求中找到标记时才会启动.根据用于运行脚本的SAPI,标记是环境变量(对于CLI脚本)或cookie或GET或POST参数(对于网页).阅读文档的“Starting The Debugger”部分.

当PHP解释器开始执行PHP脚本时,如果xdebug找到上面解释的标记,那么它会尝试连接xdebug客户端.否则,它会停止运行并让脚本以全速运行.

当环境中存在调试标记时,xdebug扩展(服务器)会尝试连接到xdebug客户端(默认情况下,在localhost的端口9000上,但可以根据需要更改这些设置).如果它无法连接(因为客户端没有监听),那么它会记录故障,然后将自己放在一边,让脚本全速运行.

成功连接到客户端后,xdebug PHP扩展会在运行PHP脚本的第一个语句之前停止,或者在脚本执行到达断点之前运行脚本.在建立连接时,客户端在初始通信期间将此行为和断点列表发送到服务器.然后,扩展等待来自客户端的命令.客户端向开发人员显示正在运行的脚本的当前状态(下一个要运行的语句,当前作用域中的变量值等)并等待命令(运行下一个语句,继续,添加/删除断点,观察一些变量)等等).

为什么它不适合你?

从你的问题我不是很清楚,但我假设你在运行xdebug客户端(localhost)的同一台计算机上运行webserver(带有PHP解释器和xdebug扩展).如果不是这样,请不要绝望.解决方案是一个命令行(在答案的最后读取).

从您在问题中发布的信息可以清楚地看到xdebug已安装,启用且运行正常. telnet localhost 9988的输出表示没有人正在侦听端口9988.xdebug客户端应该在那里监听.

我从未使用过Sublime Text(及其软件包). This article解释了如何安装和使其工作.但是,它没有解释如何配置它来侦听端口9988.

我首先设置PHP xdebug扩展以连接到默认端口(9000):

xdebug.remote_port=9000

然后,如果一切正常,我会尝试找出如何配置Sublime Text xdebug包来侦听不同的端口.你真的需要它来听另一个端口吗?

如果Web服务器和xdebug客户端位于不同的计算机上会怎样?

如果需要调试在远程计算机上运行的PHP脚本,xdebug客户端将侦听本地计算机(在端口9000上),xdebug扩展会尝试连接到远程计算机上的端口9000.内部网和VPN中可能的解决方案是将xdebug配置为连接到本地计算机的端口9000,但除了这些条件之外,它通常还需要更改防火墙和/或其他安全软件.

如果您具有对远程计算机的ssh访问权限,则在这种情况下调试PHP脚本的最简单方法是从远程计算机的端口9000到本地计算机的端口9000创建ssh隧道.

假设您使用ssh连接到远程计算机(将文件放在其上),您所要做的就是将-R 9000:localhost:9000附加到用于连接的命令行并启动到远程计算机的ssh会话机.

只要此连接打开,远程计算机(-R)上的端口9000(上面命令行中的第一个9000)上的任何连接请求都将通过隧道转发到端口9000(命令行中的第二个9000)本地机器(localhost).这样远程xdebug PHP扩展就能够联系远程xdebug客户端(假设它正在监听).

上一篇:Java脚本,如何开始?将文件链接到Javascript


下一篇:Hadoop学习笔记Hadoop伪分布式环境建设