[英]Xdebug unable to connect to client, where do I start debugging the debugger?
我正在 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 text 客户端,我不知道。 当我运行测试/等时,崇高的文本 xdebug 确实显示消息“正在重新加载 /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 调试需要两个协作的组件:一个充当服务器的 PHP 扩展和一个知道如何与此扩展通信并驱动其功能的软件(它是客户端)。
然而,尽管客户端连接到服务器的常用客户端-服务器协议,PHP 调试器的工作方式相反:服务器是连接到客户端的服务器(应该启动并侦听端口9000
)。
xdebug
是最著名的用于调试的 PHP 扩展。 有许多程序和程序扩展/插件充当它的客户端。 我没有使用 Sublime 的 Xdebug 包(首先我没有使用 Sublime),但原理是相同的。
客户端软件(在您的案例中带有 Xdebug 包的 Sublime)开始侦听localhost
端口9000
,等待服务器启动连接。 它可能不会一直监听端口,而是只有在开发人员告诉它时才会监听。
您启动 PHP 脚本进行调试。 xdebug
不会启动对服务器的所有请求,但仅当它在请求中找到标记时才会启动。 根据用于运行脚本的 SAPI,标记是环境变量(对于 CLI 脚本)或 cookie 或GET
或POST
参数(对于网页)。 阅读文档的“启动调试器”部分的更多信息。
当 PHP 解释器开始执行 PHP 脚本时,如果xdebug
找到了上面解释的标记,那么它会尝试连接xdebug
客户端。 否则,它会避开并让脚本全速运行。
当调试标记存在于环境中时, xdebug
扩展(服务器)尝试连接到xdebug
客户端(默认情况下在localhost
端口9000
,但可以根据需要更改这些设置)。 如果它无法连接(因为客户端未在侦听),则它会记录故障,然后将自己排除在外并让脚本全速运行。
在它成功连接到客户端后, xdebug
PHP 扩展要么在运行 PHP 脚本的第一条语句之前停止,要么运行脚本直到它的执行到达断点。 此行为和断点列表由客户端在建立连接时的初始通信期间发送到服务器。 然后扩展等待来自客户端的命令。 客户端向开发人员显示正在运行的脚本的当前状态(要运行的下一条语句、当前范围内变量的值等)并等待命令(运行下一条语句、继续、添加/删除断点、观察一些变量等)。
从您的问题中我不是很清楚,但我假设您在运行xdebug
客户端( localhost
)的同一台计算机上运行网络服务器(带有 PHP 解释器和xdebug
扩展)。 如果情况并非如此,请不要绝望。 解决方案是一个命令行(在答案末尾阅读)。
从您在问题中发布的信息来看,很明显xdebug
已安装、启用并且可以正常工作。 telnet localhost 9988
的输出表示没有人在监听端口9988
。 xdebug
客户端应该在那里监听。
我从未使用过 Sublime Text(及其包)。 本文介绍了如何安装并使其工作。 但是,它没有解释如何配置它以侦听端口9988
。
我首先将 PHP xdebug
扩展设置为连接到默认端口 ( 9000
):
xdebug.remote_port=9000
然后,如果一切正常,我会尝试找出如何配置 Sublime Text xdebug
包以侦听不同的端口。 你真的需要它来监听不同的端口吗?
xdebug
客户端在不同的计算机上怎么办? 如果您需要调试在远程机器上运行的 PHP 脚本, xdebug
客户端会在本地机器上侦听(在端口9000
),而xdebug
扩展会尝试连接到远程机器上的端口9000
。 Intranet 和 VPN 中可能的解决方案是配置xdebug
以连接到本地机器的端口9000
,但除了这些条件之外,它通常还需要更改防火墙和/或其他安全软件。
调试在这种情况下,PHP脚本,如果你有最简单的方法ssh
远程计算机访问是创建一个ssh
从隧道端口9000
的远程计算机的端口9000
的本地机。
假设您使用ssh
连接到远程机器(将文件放在上面),您所要做的就是将-R 9000:localhost:9000
附加到用于连接并启动到远程的ssh
会话的命令行机。
只要这种连接是打开的,在端口的任何连接请求9000
(第一9000
的远程计算机(上面在命令行上) -R
)通过隧道转发到端口9000
(第二9000
从命令行)本地机器( localhost
)。 这样远程xdebug
PHP 扩展就能够联系远程xdebug
客户端(假设它正在监听)。
好的,在对不同设置进行了大量测试后,以下是我为追随我的人调试问题的建议:
不要依赖仅使用 1 个 xdebug 客户端进行测试! 安装两个编辑器/IDE 是微不足道的,所以运行一个备用编辑器,以便可以查看 xdebug 或特定客户端是否有问题!
xdebug+xdebug 客户端组合的配置可以有3 个位置! 客户端(或编辑器插件)配置、20-xdebug-conf.ini 文件(或在 php.ini 中的等效文件)和您的项目特定配置。 确保所有 3 个位置在端口、路径映射等方面都是同步的。
如果您使用的是xdebug-v3
,请尝试:
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=1
这应该可以解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.