我正在 sublime text 中为 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
进行调试可能会有所帮助,但它只会显示谷歌浏览器错误页面:“本地主机拒绝连接”。也许另一端存在错误,无法将数据推送到 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 扩展和一个知道如何与此扩展通信并驱动其功能的软件(它是客户端)。
然而,尽管客户端连接到服务器的常用客户端-服务器协议(protocol),PHP 调试器的工作方式相反:服务器是连接到客户端的服务器(应该启动并监听端口 9000
)。
xdebug
是最著名的用于调试的 PHP 扩展。有许多程序和程序扩展/插件充当它的客户端。我没有使用 Sublime 的 Xdebug 包(首先我没有使用 Sublime),但原理是相同的。
调试 session 如何工作?
客户端软件(在您的情况下带有 Xdebug 包的 Sublime)开始监听 9000
的端口 localhost
,等待服务器启动连接。它可能不会一直监听端口,而是只有在开发人员告诉它时才会监听。
您启动 PHP 脚本进行调试。 xdebug
不会启动对服务器的所有请求,但仅当它在请求中找到标记时才会启动。根据用于运行脚本的 SAPI,标记是环境变量(对于 CLI 脚本)或 cookie 或 GET
或 POST
参数(对于网页)。在文档的 "Starting The Debugger" 部分阅读更多信息。
当 PHP 解释器开始执行 PHP 脚本时,如果 xdebug
找到上述标记,则它会尝试连接 xdebug
客户端。否则,它会避开并让脚本全速运行。
当调试标记存在于环境中时,xdebug
扩展(服务器)尝试连接到 xdebug
客户端(默认情况下,端口 9000
的 0x2518122431341 可以根据需要更改这些设置)。如果它无法连接(因为客户端未在监听),则它会记录故障,然后将自己排除在外并让脚本全速运行。
成功连接到客户端后,localhost
PHP 扩展要么在运行 PHP 脚本的第一条语句之前停止,要么运行脚本直到它的执行到达断点。此行为和断点列表由客户端在建立连接时的初始通信期间发送到服务器。然后扩展等待来自客户端的命令。客户端向开发人员显示正在运行的脚本的当前状态(要运行的下一条语句、当前范围内变量的值等)并等待命令(运行下一条语句、继续、添加/删除断点、观察一些变量等等)。
为什么它不适合你?
从您的问题中我不太清楚,但我假设您在运行 xdebug
客户端( xdebug
)的同一台计算机上运行网络服务器(带有 PHP 解释器和 xdebug
扩展)。如果情况并非如此,请不要绝望。解决方案是一个命令行(在答案末尾阅读)。
从您在问题中发布的信息可以清楚地看出,localhost
已安装、启用且工作正常。 xdebug
的输出表示没有人在监听端口 telnet localhost 9988
。 9988
客户端应该在那里监听。
我从未使用过 Sublime Text(及其包)。 This article 解释了如何安装并使其工作。但是,它没有解释如何配置它以监听端口 xdebug
。
我首先将 PHP 9988
扩展设置为连接到默认端口( xdebug
):
xdebug.remote_port=9000
然后,如果一切正常,我会尝试找出如何配置 Sublime Text 9000
包以监听不同的端口。你真的需要它来监听不同的端口吗?如果 Web 服务器和
xdebug
客户端在不同的计算机上怎么办?如果您需要调试在远程机器上运行的 PHP 脚本,则
xdebug
客户端在本地机器上监听(在端口 xdebug
上),并且 9000
扩展尝试连接到远程机器上的端口 0x231341313 Intranet 和 VPN 中可行的解决方案是配置 xdebug
以连接到本地机器的端口 9000
,但除了这些条件外,通常还需要更改防火墙和/或其他安全软件。这种情况下调试PHP脚本最简单的方法如果你有
xdebug
访问远程机器就是从本地机器2431313413414134134134134134134134134134145的远程机器的隧道端口假设您使用
9000
连接到远程机器(将文件放在上面),您所要做的就是将 ssh
附加到用于连接并启动 ssh
session 的命令行。只要这个连接是打开的,远程机器(
9000
)的端口 9000
(上面命令行中的第一个 ssh
)上的任何连接请求都会通过隧道转发到端口 018143141 的第二行命令 0x2131315 的 0213131514145本地机器( -R 9000:localhost:9000
)。这样远程 ssh
PHP 扩展就可以联系远程 9000
客户端(假设它正在监听)。关于php - Xdebug 无法连接到客户端,从哪里开始调试调试器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39027686/