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


Step-by-step: How to do Xdebug troubleshooting connection to client IDE

背景

将Xdebug与PHP和KomodoIDE以及EclipsePDT一起使用。

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

问题

连接到客户端工作站不起作用,而且很难确定原因,因为它在多个IDE中失败。

问题

如果您知道Xdebug已经安装并在服务器上工作,但客户端没有连接,那么最好有一个循序渐进的检查表来解决这种情况。

有人能帮助添加到这一点上,以制定一份全面的故障排除清单吗?

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

  • SSH进入web主机并尝试到达客户端:

    • 主机能到达客户端吗?(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存储库中创建了一个文件(https://github.com/derickr/xdebug.org/blob/master/html/docs/tutorials/troubleshooting.rest)收集小费。随意分叉和伸展!

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

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

在你开始你的脚本之前,你需要告诉你的客户可以接收调试连接,请参阅的文档具体的客户如何做到这一点。使用捆绑的客户端只需在编译和安装后启动它。您可以通过运行"debugclient"。如果要使用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)

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

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

http://wiki.netbeans.org/HowToConfigureXDebug

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

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

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