为啥在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃?
Posted
技术标签:
【中文标题】为啥在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃?【英文标题】:Why does xdebug crash apache on every XAMPP install I've tried?为什么在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃? 【发布时间】:2010-09-17 10:23:47 【问题描述】:我在三台不同的计算机上安装了 Windows XAMPP 软件包,其中两台运行 Windows Vista 32 位(1 台 Ultimate / 1 台 Home Premium),1 台运行 Windows Vista 64 Home Premium。
在 php.ini 中启用 xdebug 并重新启动 apache 后,查看默认的 XAMPP localhost 索引会导致 apache 每次都以相同的方式崩溃,并报告 'php_xdebug.dll' 作为故障模块名称。
这是来自 Windows Crash Reporter 的完整报告:
Problem signature:
Problem Event Name: APPCRASH
Application Name: apache.exe
Application Version: 2.2.9.0
Application Timestamp: 4853f994
Fault Module Name: php_xdebug.dll
Fault Module Version: 2.0.3.0
Fault Module Timestamp: 47fcd9b9
Exception Code: c0000005
Exception Offset: 00008493
OS Version: 6.0.6001.2.1.0.768.3
Locale ID: 1033
Additional Information 1: a34a
Additional Information 2: c9c5f4fd744690d388ab9d5b3eb051a7
Additional Information 3: cb2e
Additional Information 4: 650bb5690556a17e911375b94d3e16f0
我试过用谷歌搜索这个问题,但没有找到任何解决方案,只报告了类似的错误。
编辑:我为 php_xdebug.dll 启用了扩展行,到目前为止似乎已经停止了崩溃。
【问题讨论】:
Vista + 最新的 XAMPP + 最新的 xdebug.dll 工作正常! 【参考方案1】:通过其他一些论坛,我发现了一个可能的提示——虽然 xampp 上的 apache 通常使用 apache/bin 目录中的 php.ini,但有些模块不使用。所以我玩弄了那个目录中的 php.ini (到目前为止,简单地将它移出对我有用的方式,如重命名/删除它)。至少可能想尝试一下。
【讨论】:
【参考方案2】:我找到了解决这个问题的方法。你可以在这里找到它:http://wiki.mpsoftware.dk/index.php?title=Tutorial_on_how_to_configure_Xdebug_to_work_with_phpDesigner_2008
问题在于 XDebug 与 Zend 优化器不兼容,因此您需要注释 [Zend] 部分下的所有部分。
【讨论】:
这显然是一个移动的目标。最新的 xampp 似乎没有使用 Zend 优化器,但是这个问题对很多人来说仍然存在,包括我自己。【参考方案3】:确保您拥有最新版本的 xdebug?我在使用旧版本的 xampp 时遇到了同样的问题,下载了 xdebug 的最新 .dll,更改了 php.ini 中的映射,并且成功了。
花了我几个小时才搞定..grr
【讨论】:
【参考方案4】:-
打开 xampp\apache\bin 文件夹中的 php.ini(不在 xampp\php 文件夹中)。
找到 extension=php_xdebug.dll 行。
取消注释。
【讨论】:
【参考方案5】:通常只能有一个 PHP 引擎级扩展。我目前在我的机器上使用最新的 xampp lite 包,带有 xdebug 并且它很好。
使用 grep(Windows 的 gnu32 包)或其他文本过滤器,获取 PHP 文件中包含“扩展”一词的每一行的列表,并确保您确切知道哪些包正在用于您的 wamp堆栈。
接下来。 xdebug 作为引擎扩展效果更好,但正如一些人指出的那样,它也可以用作常规扩展。引擎和普通扩展之间的性能损失是分析几乎没有那么准确,编辑器 -> 服务器调试不可靠,并且除了显式 xdebug_break() 语句之外似乎无法正常工作。
要尝试的最后几件事是调用 php -i 并将其通过管道传输到文本文件。如果它在那里崩溃,那么是时候采取更严厉的措施了。在您的 Windows 机器上找到所有 php.ini 文件,并将它们一一重命名为 php.disabled.ini 或 disabled_php.ini 之类的名称,然后再次尝试 php -i 调用。很可能你有一个 php.ini 文件潜伏在一些奇怪的位置,比如 c:\ | c:\windows\ | c:\windows\system 或其他在路径中优先的地方,然后你期望它是 xammp\apache\bin
【讨论】:
【参考方案6】:有一个 Windows 兼容性列表 available here。似乎 Vista 不支持 xdebug...
【讨论】:
【参考方案7】:我也有这个问题。将您安装的 XAMPP 降级到以前的版本,该错误已修复。我不确定究竟是什么原因造成的,但这是目前已知的唯一解决方案。您可以获得第二个最新版本here。
【讨论】:
【参考方案8】:Matty 的回答帮助我防止 Apache 崩溃,但我无法让远程调试会话正常工作。每当我尝试单步执行代码时,我的客户都会抱怨连接已关闭,所以我还没有调试。
但是,如果它对其他人有用,这里是我在 XAMPP 1.6.8 中对 apache\bin\php.ini 文件所做的编辑(在 1.7.0 中也是如此)。第 671 行:
extension=php_xdebug-2.0.4-5.2.8.dll
我添加了第 1297 行:
[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="\xampplite\php\ext\php_xdebug-2.0.4-5.2.8.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="\xampplite\tmp"
xdebug.trace_output_dir="\xampplite\tmp"
【讨论】:
你不能同时拥有 "extension=..." 和 "zend_extension_ts=..." 否则你在调试时不会得到断点,你也不知道为什么。删除 extension= 行,并将“zend_extension_ts”更改为“zend_extension”。【参考方案9】:我得到了一个适用于 Vista 的解决方案,结合使用上述方法,所以如果这对这里的任何人有帮助...
Eclipse Europa - 版本:3.3.2 内部版本号:M20080221-1800
XAMPP - win32 版本 1.6.8 安装程序
xdebug - php_xdebug-2.0.2-5.2.5.dll
~/xampp/apache/bin/php.ini 的内容
[Zend]
;zend_extension_ts = "C:\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\xampp\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:
[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="C:\xampp\php\ext\php_xdebug-2.0.2-5.2.5.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
对我来说绝对至关重要的一点......
;extension=php_xdebug-2.0.2-5.2.5.dll
没错!注释掉上面一行。
希望对你有帮助
【讨论】:
【参考方案10】:感谢您的评论,我使用此版本的 php_xdebug-2.0.2-5.2.5.dll 解决了问题,在 Windows Vista Business 64bit 上为我工作...... php.ini 配置是相同的,只是为了使用这个xdebug dll版本.......谢谢
爱马仕
【讨论】:
这个版本对我有用,我现在没有崩溃,但现在我无法调试,因为我的eclipse正在启动并且没有调试,所以我得到了php_xdebug-2.0.3-5.2 .5.dll 版本并正常工作,但再次出现此崩溃窗口,然后我将使用此版本等待解决方案 对于 Xampp 用户在bugs.xdebug.org/view.php?id=410 上阅读此错误,有一个解决方案...希望对您有所帮助【参考方案11】:根据这个Issue,我建议你在你的php.ini
中禁用这两行:
;xdebug.profiler_enable=1
;xdebug.profiler_output_dir="(temp_dir)"
为我工作
【讨论】:
【参考方案12】:我正在使用 Vista x86 SP1、XAMPP 1.6.8 和 php_xdebug-2.0.2-5.2.5.dll 插件。 最近我注意到,当我通过右键单击运行 xampp-control.exe => 以管理员身份运行时,所有崩溃都消失了:) 有时会发生但非常罕见,我可以在 Eclipse PDT 中使用调试器。 看看我的解决方案
【讨论】:
【参考方案13】:我正在使用 xDebug 在我的 Win7 机器上运行适用于 Windows 1.7.1 版的 XAMPP,它运行良好。
检查你是否安装了SP1,然后关注these notes:
找到包含implicit_flush
的行,设置如下:
implicit_flush = On
找到名为[Zend]
的部分并通过在每行的开头放置一个分号(“;”)来注释掉所有行。
找到以下行:zend_extension = "c:\xampp\php\ext\php_xdebug.dll"
并取消注释。
找到[XDebug]
部分并取消注释所有行(第一行是实际注释除外)。对于 Windows,它应该类似于下面的示例:
[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=true
xdebug.remote_host=localhost
xdebug.remote_port=10000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
【讨论】:
这个链接帮助我解决了我的 vista-xdebug 问题,几个月后每天重启几次 apache。 链接很有帮助,谢谢!请在您的答案中添加关键值。【参考方案14】:在 Google 上搜索 XDebug 导致我的 WAMP Apache 崩溃的原因时遇到了这个问题。我刚刚使用当前版本的 WAMP(2.0) 升级到 Vista 64 笔记本电脑,这是我在 php.ini 中放入的内容,以使崩溃停止。
我使用 NetBeans 作为我的 IDE,调试工作正常。
首先,在您的活动 php.ini 中注释掉。
;extension=php_xdebug-2.0.4-5.2.8.dll
然后将其添加到您的活动 php.ini 的底部(相应地调整您的目录和 xdebug 文件名。)
[XDebug]
; Only Zend OR (!) XDebug
zend_extension_ts="C:/Program Files (x86)/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"
xdebug.remote_enable=on
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="C:/Program Files (x86)/wamp/tmp"
【讨论】:
【参考方案15】:XDebug 在 Vista 上存在线程安全问题,我在使用 IIS7 和 PHP 作为 ISAPI 模块时遇到了同样的问题,如果加载了 xdebug.dll,服务器会随机崩溃,然后我找到了一篇描述 PHP+ 的文章XDebug(在 Vista 上)应该在单线程模式下运行。
我让它按照以下方式工作:
一个非线程安全的 PHP 版本,一个用于您的 PHP 版本的非线程安全 xdebug.dll,在 php.ini 中它应该被加载为 zend_extension="C:/FullPathToXdebugDll"(没有 "_ts"!) ,以 CGI(或更好的 FastCGI)模式运行 php。 (CGI/FastCGI 强制它是单线程的)。
这里是文章的链接: http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/
现在我正在寻找一种可能性,用 Xampp 或 InstantRails(或类似的东西)在我的笔记本上运行它(Vista Home Premium 没有 IIS),但我不知道如何强制 apache在单线程模式下运行,有人知道怎么做吗?
【讨论】:
【参考方案16】:Eugen 适合我。
去http://xdebug.org/download.php下载非线程安全的dll IE。 5.2 VC6非线程安全(32位)
将其保存到您的\xampp\php\ext
目录中
打开您的 php.iniC:\xampp\php\php.ini
滚动到底部找到[XDebug]
并替换
zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"
有了这个
zend_extension="C:\xampp\php\ext\php_xdebug-2.0.5-5.2-nts.dll"
所以它看起来像这样:
[XDebug]
;; Only Zend OR (!) XDebug
zend_extension="C:\xampp\php\ext\php_xdebug-2.0.5-5.2-nts.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
【讨论】:
这在将 php 作为 CGI 二进制文件运行时非常有用,例如使用 Apache + Fast CGI 或 PHP-FPM。否则,在使用 Apache PHP 模块时,您将需要线程安全版本——这是 XAMPP 的默认版本。【参考方案17】:这可能对某人有帮助。在使用 Eclipse 和 XDebug 调试 PHP 网页时,我遇到了可重复的 Apache 崩溃,并尝试了各种重新安装和 PHP.INI 更改,最终发现我的问题与在单独的文件中使用重复的变量名有关。一个文件包含另一个文件,并且两者都有(比如说)$foo。一旦我在第二个文件中将 $foo 重命名为 $newfoo 并重新启动 Apache,我就摆脱了崩溃。
另外,有点相关,我从来没有让 PHP.INI 文件像这里和其他地方广泛记录的那样工作。我必须从 zend-extension 中删除 _ts,如下所示,以获取 phpinfo() 文本:使用 Xdebug v2.0.5,版权所有 (c) 2002-2008,由 Derick Rethans 提供。
XAMPP 1.7.2(使用自带的php_xdebug.dll) PHP 5.3.0
这是我的 PHP.INI 文件 sn-p:
xdebug.remote_enable=1 xdebug.remote_host="127.0.0.1" xdebug.remote_port=9000 xdebug.remote_handler="dbgp" zend_extension="C:\xampp\php\ext\php_xdebug.dll"
【讨论】:
【参考方案18】:我遇到了同样的问题。它已由最新版本的 xdebug (2.0.6) 解决。它仍处于开发模式,但对我来说它比以前的版本更稳定:)
它是 XAMPP 1.7.3beta 的一部分 http://www.apachefriends.org/en/xampp-beta.html
启用 xdebug 只需取消注释 xampp/php/php.ini 中的一行
HTH
【讨论】:
最新版本的 xampp 有旧版本的 xdebug。我去了 xdebug 站点并使用他们的安装工具获得了最新版本,它不再对我崩溃了。【参考方案19】:安装新版本的 XAMPP
【讨论】:
【参考方案20】:我在 Windows 7 Ultimate 6.1.7600 上使用 Xampp 1.7.3 (php 5.3.1) 让它工作。在作者对取消注释行的帖子编辑之后:zend_extension = C:\xampp\php\ext\php_xdebug.dll
在 xampp\php\php.ini 中,我设法让 apache http 服务器停止崩溃!
原来 Xampp 带有它自己的 xdebug 版本,我什至从一开始就不需要下载任何东西。您只需要取消注释上述行并在 php.ini 的 [xdebug] 部分中启用您想要的 xdebug 的其他功能。
我安装 Xampp 时附带的 xdebug 版本是 2.0.6-dev。希望这会有所帮助!
编辑:忘了提到我正在运行 Windows 7 的 x64 风格:P
【讨论】:
【参考方案21】:解决方案http://community.activestate.com/forum-topic/apache-crashes#comment-9812 Obviousliy buggy apache 模块 - 将 php 作为 CGI 运行。
【讨论】:
【参考方案22】:我的经验可能会有用: 我使用 XAMPP 1.7.4,当尝试使用 xdebug 2.1.0 从 eclipse 调试 php 页面时,apache 总是崩溃... 我用 xdebug 2.0.5 替换了 xdebug 2.1.0,现在一切正常
【讨论】:
这里也一样,php_xdebug-2.0.5-5.3-vc6.dll 为我解决了问题 糟糕!不,毕竟它对我没有用:它只是巧合。从http://localhost/joomla/hello.php
加载文件有效,而从http://localhost/php101/hello.php
加载相同文件时崩溃。 joomla
和 php101
都是指向同一个目录的符号链接【参考方案23】:
我刚刚使用 zip 文件安装了 xampp 1.7.4。如果您使用 .exe 文件,除了 1.7.4 存在错误外,它可以很好地与软件包随附的 xdebug 文件配合使用。
我还使用Joomla tutorial 来设置调试。 现在一切似乎都运行良好。
【讨论】:
【参考方案24】:我在互联网上寻找这个问题并尝试了许多解决方案,但都没有奏效。 我尝试了这个配置,只是最后一次测试并为我工作,在 Eclipse 中更改 Windows/Preferences/PHP/Debug 并选择 Xdebug 作为 PHP 调试器。
【讨论】:
以上是关于为啥在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在我的 XAMPP 上为这个 PHP 网站设置虚拟主机?