【问题标题】:Can't get Xdebug to work on Windows 7无法让 Xdebug 在 Windows 7 上运行
【发布时间】:2010-12-26 14:58:32
【问题描述】:

我安装了最新的 XAMPP 包,其中包括 PHP 5.3.0。我正在尝试启用 Xdebug,但它不起作用。

这是我在 XAMPP 附带的 php.ini 中所做的更改:

; uncommented
zend_extension = "X:\xampp\php\ext\php_xdebug.dll"

; added the following lines:
xdebug.remote_enable=true
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

Apache 启动正常,但是当我在浏览器中打开 http://localhost/ 时,出现以下错误:

如果我单击Close the program 按钮,错误消息将在一秒钟内重新出现,就好像它处于无限循环中一样。非常感谢任何帮助以使其正常工作。

我正在运行全新安装的 Windows 7 Ultimate 64 位。

编辑: 从 phpinfo() 的结果来看:

Zend Extension Build    API220090626,TS,VC6 
PHP Extension Build     API20090626,TS,VC6 
Debug Build             no 
Thread Safety           enabled

【问题讨论】:

    标签: php apache windows-7 xampp xdebug


    【解决方案1】:

    您可能使用了错误的 Xdebug 版本。我会查看phpinfo() 并将那里的信息与different versions of the Xdebug dll 进行比较。

    具体来说,您想查看是否启用了“线程安全”,并且您需要知道您运行的是 VC6 编译的 PHP 还是 VC9(如果您使用的是 Apache,几乎可以保证您想要VC6)。

    【讨论】:

    • 线程安全已启用。 PHP 符合 VC6。我抓住了线程安全的 5.3 VC6,没有加载 32 位版本和 64 位版本。但是,Apache 不再崩溃了。
    • 这很有帮助,我有 php 5.4,但尝试安装 5.3 dll,但没有给出错误。
    【解决方案2】:

    您是否尝试过 XDEBUG 的自定义安装向导,它会分析您的 php 安装并提供您需要遵循的确切步骤

    Windows 二进制文件通常适用于上述 PHP 版本的每个迷你版本,尽管该扩展是针对当时最新的 PHP 版本构建的。 VCx 标记告知扩展是使用哪个编译器构建的,以及是否禁用 ZTS 是非线程安全的。这些限定符需要与您使用的 PHP 版本相匹配。如果您不知道自己需要哪一个,请参考自定义安装说明。

    http://xdebug.org/wizard.php

    只需将您的 phpinfo 粘贴到文本框中,您将获得您的 php 所需的确切 xdebug dll

    【讨论】:

    • 这太棒了。唯一的问题是它直接将其安装到 PHP 中,因此您需要进行更多调整才能从命令行运行它 - 这是一些工具所做的。
    • 向导救了我,我试过的其他方法都没有用。最终成为绝对路径与相对路径。
    【解决方案3】:

    坦率地说,我也有 2 天非常糟糕,我现在不知道最终解决了什么问题, 所以这是我收集的注意事项和陷阱:

    ; this is the thread safe version,
    ; the absence of _nts_ in the dll name 'shows' this
    ; do not use _ts, your library won't get registered and won't show in phpInfo()
    zend_extension = "D:/wamp/bin/php/php5.3.8/zend_ext/php_xdebug-2.1.2-5.3-vc9-x86_64.dll"
    

    检查你的 php.ini,检查 phpinfo() 是否所有值(到达)

    xdebug.remote_enable = on
    xdebug.remote_handler=dbgp
    xdebug.profiler_enable = off
    xdebug.profiler_enable_trigger = off
    ; if you have multiple virtual hosts ( like 'local.fooclient' )
    ; maybe using the IP is safer (for any same-machine-debugging)
    xdebug.remote_host=127.0.0.1
    ; maybe a -much- lower port helped, 84 was free. use netstat to figure out.
    xdebug.remote_port=84
    ; idekey! also see note below
    xdebug.idekey=netbeans-xdebug
    

    更多陷阱:

    我在网上多次看到 xdebug.remote_handle(没有 r)的错字。小心。

    关于 idekey 的注释:上面的 idekey 确实在 phpinfo() 中显示为主值,但是 被 MYMACHINENAME$ 之类的“本地值”覆盖。 ==> 设置一个名为 DBGP_IDEKEY 的全局环境变量(在计算机属性中)并重新启动(或者可能只是注销)到(也)netbeans-xdebug 有帮助!再次:重新检查 phpInfo() 才生效。

    当然要调整 netbeans-menu:options->php tab->debugging 部分到这个端口和 session id。

    Here 是一个脚本,用于检查(通过 php 方式)您打算与之通信的端口是否打开。 (下面还有 cmets,对于那些懒得从图片中打字的人来说)

    为了让您的浏览器能够连接,不要开始忘记(在沮丧中)始终附加调试启动 get-argument:

      http://localhost/myTest.php?XDEBUG_SESSION_START=netbeans-xdebug
    

    港口边境this tool 也可能有所帮助。

    四重检查,您将 VC6 和 VC9 编译版本的所有内容分开。

    从命令行运行whatever/path/php.exe myTest.php(一旦完成上述设置)也可能会显示其他错误(确实如此,而我正在修补不正确的 dll)。

    我可以推荐http://www.wampserver.com (出于个人原因,它比流行的 xampp 包更适合我......)

    【讨论】:

      【解决方案4】:

      是的,有一个已知问题 - 几乎不可能让 Xdebug 与最新的 Xampp 和 64 位 Vista/Win 7 一起工作。

      有一个bug 被举报,许多用户抱怨它。

      解决方案似乎是latest beta version on Xampp。它包括 xdebug 的 2.0.6 (dev) 版本,它工作得很好。

      我在 64 位 Vista 上测试了大约 10 天,还没有遇到任何问题。

      【讨论】:

        【解决方案5】:

        当 xdebug 不使用 XAMPP 安装时,仅使用 PHP(32 位、TS、VC6,在 C:\Program Files (x86)\PHP 中)和 Windows 7(64 位)上的 Apache(32 位),在 php .ini 您需要指定x86 Program Files 之类的文件夹的完整路径。

        zend_extension="C:\Program Files (x86)\PHP\ext\php_xdebug-2.1.1-5.3-vc6.dll"
        

        zend_extension="C:\Program Files\PHP\ext\php_xdebug-2.1.1-5.3-vc6.dll"
        

        这是我的错误,当更改为 x86 文件夹时,xdebug 开始正常工作。希望这对您也有帮助。

        【讨论】:

          【解决方案6】:

          正如其他人所说,您需要将您的 xdebug 版本与您的 php 版本相匹配。

          您已经匹配了 PHP 版本号、线程安全和编译器。

          如果您还没有弄清楚(这是一个旧线程),您缺少的是 INI 配置。如果您正在加载一个线程安全的模块,您需要使用以下行:

          zend_extension="C:\Path\To\The\Extension.dll"
          

          如果模块不是线程安全的,那么你就使用你一直在尝试使用的INI指令。

          这仅适用于 zend_extension 而非常规扩展。

          【讨论】:

          • 注意:使用 ts 对于 Apache 2.2.21、W7 x64 下的 PHP 5.3 是不正确的,即使 PHP 和 Apoache 是 TS,使用普通键(只需分配正确的 dll 到它,就是其中没有 _nts 的那个)。也许前一段时间它是正确的。
          • 你是对的,怀疑有人会在此时看到我的帖子,但我更新了它
          猜你喜欢
          • 2011-12-01
          • 2014-04-20
          • 2011-02-06
          • 2015-10-13
          • 1970-01-01
          • 2013-05-04
          • 2014-04-26
          • 2016-07-22
          • 1970-01-01
          相关资源
          最近更新 更多