一步一步:如何进行 Xdebug 故障排除连接到客户端 IDE

Posted

技术标签:

【中文标题】一步一步:如何进行 Xdebug 故障排除连接到客户端 IDE【英文标题】:Step-by-step: How to do Xdebug troubleshooting connection to client IDE 【发布时间】:2012-03-08 23:41:15 【问题描述】:

背景

将 Xdebug 与 php 和 Komodo IDE 以及 Eclipse PDT 结合使用。

Xdebug 已安装在服务器上并正常工作。这得到证实,因为 Xdebug 代码命令在插入服务器上的 PHP 文件时按预期工作。

问题

无法连接到客户端工作站,并且很难确定原因,因为它使用多个 IDE 失败。

问题

如果您知道 Xdebug 已安装并在服务器上运行,但客户端无法连接,则最好有一个分步清单来解决问题。

任何人都可以帮助添加此内容以制作全面的故障排除清单吗?

具体来说,是否有任何简单的方法来确保网络流量到达客户端,并且按照 IDE 期望查看数据的方式正确格式化?

SSH 进入网络主机并尝试访问客户端:

主机可以访问客户端吗? (ping -c 5 xxx.xxx.xxx.xxx) 主机能否访问端口 9000? (nmap -p 9000 xxx.xxx.xxx.xxx) 如果以上两个都成功了,输出应该是什么? 如果以上两个都失败了,接下来的故障排除步骤是什么?

验证客户端软件防火墙的设置

验证 linux 主机上 iptables 的设置 验证硬件防火墙 b/t 客户端和主机

目标

我们的目标是找到一些解决方案,让客户端机器上的人至少可以确认某事正在到达客户端,而不必确定 IDE 是否是问题所在,因为 IDE 是另一个级别可能会带来问题的复杂性。

【问题讨论】:

这是我绝对希望包含在 Xdebug 文档中的内容。我认为最好让很多人在这方面进行合作,所以我在 xdebug.org github 存储库 (github.com/derickr/xdebug.org/blob/master/html/docs/tutorials/…) 中创建了一个文件来收集提示。 您提到安装了xdebug,因为这些命令有效。我的预感是 xdebug 仅对 php-cli 启用,而不是 php 为 apache 启用......你能确认是这种情况吗? 相关问题:***.com/questions/18540463/…***.com/questions/11563280/…***.com/questions/1946643/… 更多相关问题:***.com/questions/14596923/… "这得到证实,因为 Xdebug 代码命令在插入服务器上的 PHP 文件时按预期工作。"能详细点吗? 【参考方案1】:

注意远程调试会话的防火墙。我通过使用 telnet 来检查 9000 端口状态来诊断我的问题,并发现防火墙的预防措施。

【讨论】:

【参考方案2】:

这是我绝对希望包含在 Xdebug 文档中的内容。我认为最好让很多人在这方面进行合作,因此我在 xdebug.org github 存储库 (https://github.com/derickr/xdebug.org/blob/master/html/docs/tutorials/troubleshooting.rest) 中创建了一个文件来收集提示。随意分叉和扩展!

在 Xdebug 方面,在即将发布的版本 (2.2) 中,它已经在其 xdebug.remote_log 文件中转储了一些额外的诊断信息,例如它是否尝试连接以及连接是被接受还是被拒绝。

【讨论】:

“它已经在它的 xdebug.remote_log 文件中转储了一些额外的诊断信息”我试过了,它根本没有记录任何东西。似乎不可能在 php 7.2.5 上将 Netbeans 与 xdebug 连接起来,而且任何日志文件中甚至都没有提示失败的原因。我什至尝试过 Netbeans 11.1。我总是得到“等待连接”【参考方案3】:

Windows 用户禁用您的防火墙,然后重试。 如果可行,请允许 Java(TM) Platform SE 二进制文件通过防火墙,然后再次启用它。 它会工作得很好!

感谢您提供的命令,它们对调试非常有用。

【讨论】:

【参考方案4】:

您可以使用debugclient 实用程序来确定客户端是否可以接收Xdebug 连接,您可以在Xdebug documentation 中阅读:

在你开始你的脚本之前,你需要告诉你的客户它 可以接收调试连接,请参考文档 具体客户如何做到这一点。使用捆绑的客户端 只需在编译和安装后启动它。你可以通过 运行“调试客户端”。如果要使用 GDB 命令集进行调试 您的脚本,请确保您使用与 Xdebug 捆绑在一起的调试客户端 1.3 作为与 Xdebug 2 捆绑的版本,仅适用于 DBGp 命令集。 当调试客户端启动时,它将显示以下信息和 然后等待,直到调试服务器启动连接:

Xdebug Simple DBGp client (0.10.0)
Copyright 2002-2007 by Derick Rethans.
- libedit support: enabled
Waiting for debug server to connect.

建立连接后,会显示调试服务器的输出:

Connect
<?xml version="1.0" encoding="iso-8859-1"?>
<init xmlns="urn:debugger_protocol_v1"
      xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
      fileuri="file:///home/httpd/www.xdebug.org/html/docs/index.php"
      language="PHP"
      protocol_version="1.0"
      appid="13202"
      idekey="derick">
  <engine version="2.0.0RC4-dev"><![CDATA[Xdebug]]></engine>
  <author><![CDATA[Derick Rethans]]></author>
  <url><![CDATA[http://xdebug.org]]></url>
  <copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright>
</init>
(cmd)

您可以找到有关 Xdebug 2 初始化协议 here 的更多信息。 进一步参考:Howto check xdebug installation. 不幸的是,debugclient 实用程序仅以源代码形式提供,因此您必须自己构建可执行文件;这可以在 Linux(请参阅 INSTALL)和 Windows(使用 Visual Studio - 请参阅 debugclient.dsp)上完成。 XAMPP 在xampp/php/debugclient.exe 中包含一个编译版本。

【讨论】:

【参考方案5】:

Netbeans 有一个非常详尽的文档,其中还介绍了如何解决此类问题:

http://wiki.netbeans.org/HowToConfigureXDebug

【讨论】:

以上是关于一步一步:如何进行 Xdebug 故障排除连接到客户端 IDE的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 PHP 脚本连接到 Redis 时对“权限被拒绝”进行故障排除

MSDTC故障排除

网络IO是如何一步一步走向零拷贝的

一步一步搭建客服系统 客户列表 - JS($.ajax)调用WCF 遇到的各种坑

如何对苹果Mac屏幕自动降低亮度进行故障排除?

如何在Windows系统中设置L2TP VPN