`
isiqi
  • 浏览: 16026369 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Windows 下安装 Xdebug 受难记之(1)

阅读更多

这篇文章的标题原来叫《用 Xdebug 进行基准测试和代码覆盖率分析》。安装 Xdebug 只是文章开头的准备工作之一。然而。仅仅是 Xdebug 的安装,就花费大量的精力和时间,再次感受了开源软件产品的 Bug 引起的磨难和困惑!

只能在这篇文章的第二部分,主要叙述用 Xdebug 进行基准测试和代码覆盖率分析的内容了。

原文的开头写到:

作为一个 PHP 程序员,你了解自己的代码 - 函数、类,在运行时占用多少内存、耗费了多少CPU时间?哪些代码导致了整个系统的效率大大下降?你了解自己的哪些代码是经常被调用的,而哪些代码可能从来就没有被运行过?……

以上的问题,我们需要通过基准测试和代码覆盖率分析(code coverage analysis)来获得有关信息,从而为优化系统提供分析依据。Xdebug 就是解决上述问题的良好工具之一。

Xdebug 是 PHP 开发环境下一个开放源代码的程序调试器(Debug工具),可以用来跟踪,调试和分析 PHP 程序的运行状况。截至 2010年8月份,Xdebug的最新版本是Xdebug 2.1.0,支持PHP4/PHP5。Xdebug 的官方网站是 http://www.xdebug.org,可以去那里了解 Xdebug 的详细信息和下载相关的软件。

一、下载和安装:

在 Windows 下和 Linux 下,Xdebug 的安装方法不尽相同。本文以 Windows 下的安装来描述。在 Windows 下,通过运行 PECL 命令来安装 Xdebug,会提示以下错误:

C:\Program Files\Zend\ZendServer\bin>pecl install xdebug
downloading xdebug-2.1.0.tgz ...
Starting to download xdebug-2.1.0.tgz (301,354 bytes)
.........................done: 301,354 bytes
66 source files, building
WARNING: php_bin C:\Program Files\Zend\ZendServer\bin\.\php.exe appears to have
a suffix .exe, but config variable php_suffix does not match
ERROR: The DSP xdebug.dsp does not exist.

这是在试图编译 Xdebug 时,无法找到 xdebug.dsp 文件导致的。

-- 第一次困惑:既然不能在 Windows 下安装,为什么还能下载?错误信息只提示结果,并没有提供解决的方法。也没有提示去哪里寻找解决方案。

我们可以去 Xdebug 的官网,直接下载对应的 PHP 和 Windows 版本的、已经编译好的二进制 Xdebug 扩展库文件(*.dll)。一定要注意下载和自己安装的 PHP 及 Windows 版本对应的 Xdebug 文件。

可以通过 phpinfo() 函数获取自己的 PHP 信息(本人用的是 Zend Server 5.0.1)。注意 PHP 版本?操作系统的位数(32bit/64bit)?PHP 是线程安全的还是非线程安全的?当前加载的 php.ini 文件的路径。

PHP Version 5.3.2
System:Windows NT WIN2003-1 5.2 build 3790 (Windows Server 2003 R2 Enterprise Edition Service Pack 2) i586
Compiler:MSVC9 (Visual C++ 2008)
Architecture:x86
Loaded Configuration File:C:\Program Files\Zend\ZendServer\etc\php.ini
Thread Safety:disabled

可以看到,本人的操作系统为 Windows Server 2003 企业版,32bit 版本,PHP 版本为 5.3.2,PHP 是用微软的 Visual Studio 2008 下的 VC9 编译的。

于是,下载的 Xdebug 版本为:

Windows binaries,5.3 VC9 Non-thread-safe (32 bit),也就是 php_xdebug-2.1.0-5.3-vc9-nts.dll 文件。

-- 但是,我忽略了我使用的 PHP 环境是 Zend Server CE 5.0.1。于是,隐患就此埋下了……

二、安装配置:

在 php.ini 文件末尾加:

[Xdebug]
zend_extension="C:\Program Files\Zend\ZendServer\lib\php_xdebug-2.1.0-5.3-vc9-nts.dll"
xdebug.auto_trace=On
xdebug.collect_params=On
xdebug.collect_return=On
xdebug.trace_output_dir="C:\Program Files\Zend\ZendServer\xdebug.trace_output_dir"
xdebug.profiler_enable=On
xdebug.profiler_output_dir="C:\Program Files\Zend\ZendServer\xdebug.profiler_output_dir"

注意:

1,在 PHP5.3 里,zend_extension 不能写为 zend_extension_ts,这在 Xdebug 的官网里写的很清楚,虽然是洋文,我注意到了,没掉到陷阱里。也许 5.3 以后的版本,永远就是这样了。
2,xdebug.trace_output_dir 和 xdebug.profiler_output_dir 文件夹组要自己建立,用于存放 Xdebug 生成的文档。
3,xdebug.* = On/Off 等配置语句的意义,本文的第二部分会写。
4,配置好后,需要重新启动 Apache,对应的 Windows 服务的名字为“apache2.2-zend”。Zend Server 的后台管理里(地址http://localhost:10081/zendserver),也可以重启服务。
5,如果 php_xdebug-*.dll 文件选择错了,比如选择了 php_xdebug-2.1.0-5.3-vc6.dll,那么运行“php -v”命令,会报告:
C:\Program Files\Zend\ZendServer\bin>php -v
Cannot load Xdebug - it was built with configuration API220090626,NTS,VC6,
where as running engine is API220090626,NTS,VC9
6,php.ini 中开启了的 ZendExtensionManager.dll 和 zendOptimizer,可能会影响 Xdebug 的启用,如果有影响,请屏蔽它们。

Apache 可以正常重启。以为配置好了,但是在 phpinfo() 信息里,无法看到 Xdebug 的信息,说明 Xdebug 的 Zend 扩展模块没有被加载。这时,运行“php -v”命令,居然没有输出信息。

三、柳暗花明

再次浏览 Xdebug 官网,发现有一个贴心的服务,就是:提取用户的 phpinfo 信息,提交给 Xdebug 官网的一个程序,它立即分析 PHP 环境的信息,即刻给出下载 Xdebug 某个版本的建议。立等可取,有点意思!

于是提交我的 phpinfo 信息,从 http://www.xdebug.org/find-binary.php 页面提交,得到提示信息:

Warning: You seem to be using Zend Server, which is known to cause issues with Xdebug.
It might work, but you're on your own.

1.Download php_xdebug-2.1.0-5.3-vc9-nts.dll
2.Move the downloaded file to C:\Program
3.Open C:\Program Files\Zend\ZendServer\etc\cfg\debugger.ini and put a ; in front of the line that says zend_extension_manager.dir.debugger= so that it says ;zend_extension_manager.dir.debugger=
4.Edit C:\Program Files\Zend\ZendServer\etc\php.ini and add at the begining of the file the line zend_extension = C:\Program\php_xdebug-2.1.0-5.3-vc9-nts.dll
5.Restart the webserver

居然能看出来用的是 Zend Server 啊?实在是高啊!我下载的 Xdebug 版本是对的。但是前头的“Warning”让我心里很凉:
已知 Zend Server 与 Xdebug 一起使用会引起一些问题,能不能工作,你自己负责 - 自己看着办。

但有一条信息很重要,就是第3条,从 debugger.ini 里注释掉 zend_extension_manager.dir.debugger= 语句。注释掉该语句,意味着屏蔽了 zend debugger。看来 zend debugger 和 Xdebug 在 PHP5.3 里不能一起共存啊?以后能不能共存呢?

遵照官方的提示做了以后,Apache 可以正常启动。php -v 命令的提示如下:

C:\Program Files\Zend\ZendServer>php -v
PHP 5.3.2 (cli) (built: Apr 1 2010 17:14:41)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Zend Extension Manager v5.1, Copyright (c) 2003-2010, by Zend Technolog
ies
- with Zend Data Cache v4.0, Copyright (c) 2004-2010, by Zend Technologies [
loaded] [licensed] [disabled]
- with Zend Utils v1.0, Copyright (c) 2004-2010, by Zend Technologies [loade
d] [licensed] [enabled]
- with Zend Optimizer+ v4.1, Copyright (c) 1999-2010, by Zend Technologies [
loaded] [licensed] [disabled]

with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
with Zend Data Cache v4.0, Copyright (c) 2004-2010, by Zend Technologies
with Zend Utils v1.0, Copyright (c) 2004-2010, by Zend Technologies

看来,Xdebug 是被正常加载了!

但是,大问题来了!这时打开浏览器,运行 php 文件,查看 phpinfo 信息,想看看 Xdebug 的信息。但是,这个 php 文件居然被下载下来了!!!也就是说,php 文件不被解析了!

这就意味着,安装 Xdebug 已经没有任何意义了。本来就是要让 Xdebug 跟踪 php 文件运行的有关信息嘛。

于是,在 Zend Server 5.0.1 下,安装 Xdebug 失败。

我的目的是熟悉 Xdebug 的使用,Xdebug 安装失败,我不想自己看着办。

-- 这个开源的 PHP 和 Xdebug 啊,到底是谁错了??!!

作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-7
来自“网眼视界”:http://blog.why100000.com
作者微博:http://t.qq.com/zhangking
“十万个为什么”电脑学习网:http://www.why100000.com

分享到:
评论

相关推荐

    windows下安装Xdebug+WinCacheGrind

    NULL 博文链接:https://zhengdl126.iteye.com/blog/414560

    Windows xp下apache + php 安装 Xdebug 扩展

    windows xp 下 apache + php 安装Xdebug 附件中 含有 Xdebug的dll扩展库文件 和 详细的 安装步骤,如果使用的是 php的其他版本 请到 www.Xdebug.org/download.php 下载相应版本

    在sublime text2上安装xdebug

    在sublime text2上安装xdebug

    Xdebug Dll下载以及教程之Xdebug配置

    使用Xdebug调试和优化PHP程序系列教程之Xdebug配置,根据Xdebug的官方文档来详细解释Xdebug的参数配置。 Xdebug配置 第一部分:安装 预编译模块 安装预编译模块是很容易的。只需要将它们放到一个目录中,并将下面的...

    xdebug-2.0.4.tgz

    1. 登录www.xdebug.org,在首页右侧有一个Windows modules,选择其中的PHP5.1.2+,下载php_xdebug-5.1.2-2.0.0beta6.dll文件; 2. 将下载的php_xdebug-5.1.2-2.0.0beta6.dll放到C:\php5\ext目录,重命名为...

    安装xdebug 扩展

    NULL 博文链接:https://ppjava.iteye.com/blog/656411

    php xdebug 插件及全面安装教程

    php xdebug 插件及全面安装教程 php xdebug 插件及全面安装教程 php xdebug 插件及全面安装教程

    phpstorm xdebug

    phpstorm 安装xdebug教程,让你轻松搭建好调试环境

    Windows下编译PHP5.4和xdebug全记录

    1.Microsoft Visual C++ 2008 Express Edition with SP1 2.Windows SDK 6.1 3.PHP SDK Binary Tools 4.Dependable libs 5.PHP5.4 Sources 6.Xdebug 2.2.0-dev 如果你需要的是 VC6 的编译环境,那么你需要安装 Visual...

    Ubuntu环境源码编译安装xdebug的方法

    本文实例讲述了Ubuntu环境源码编译安装xdebug的方法。分享给大家供大家参考,具体如下: 前面介绍了Ubuntu环境编译安装PHP和Nginx的方法,这里再来讲解一下源码编译安装xdebug的方法。 下载并解压xdebug xdebug下载...

    xdebug helper.zip

    (不太推荐此方法,如果方法1拖动安装无效的情况下,可以尝试暴力安装) 把下载好的xxx.crx 的扩展名改为 xxx.zip 在地址栏输入 chrome://extensions/ 打开 开发者模式 的开关 拖动 xxx.zip 文件到Chrome中间即可

    xdebug helper调试插件

    xdebug helper 是一个浏览器插件,主要用于程序的调试使用。适用谷歌,360浏览器。打开浏览器的扩展程序,把文件拖拽进去即可。

    xdebug helper 1.6.1 crx for chrome

    xdebug helper chrome插件是一款PHP CHROME调试插件,与Zend Studio,XAMPSERVER协同工作,易于调试、分析和扩展Xdebug跟踪,使用也很简单,打开谷歌浏览器,几步就能解决。有需要的赶快下载吧! 使用方法:解压后,...

    php_xdebug-2.7.0alpha1-7.2-vc15-nts-x86_64.dll

    window 下安装xdebug的扩展文件 php 7.2.7 nts x64 亲测可用。 调试神器

    xdebug helper for chrome(xdebug helper-1.4.3.zip)怎么删除

    (不太推荐此方法,如果方法1拖动安装无效的情况下,可以尝试暴力安装) 把下载好的xxx.crx 的扩展名改为 xxx.zip 在地址栏输入 chrome://extensions/ 打开 开发者模式 的开关 拖动 xxx.zip 文件到Chrome中间即可

    VSCode开发PHP环境配置手册(PHP8.1.1+PHP-xdebug+redis)

    1.检查phpstudy_x64是否安装在默认目录,即:D:\phpstudy_pro\ 2.复制php8.1.1nts文件夹到:D:\phpstudy_pro\Extensions\php 备注:如果非默认目录,可自行修改php.ini文件,将文件中的:extension_dir = "D:\...

    xdebug-5.6.zip

    PHP Xdebug扩展,安装配置好后,可以代码调试,自动记录运行了哪些函数,用了多少毫秒,从哪个文件运行到哪个文件等等

    xdebug远程调试配置-证实好用-附带xdebug.so

    xdebug远程调试开启配置,按文档显示加入php.ini配置文件即可。需要自己下载xdebug for windows/linux, linux还需要自己编译出.so, 这里附带两个版本的so(xdebug2.2.5/2.2.6)

    32位xdebug.so

    当你安装xdebug的时候,出现 wrong ELF class: ELFCLASS64,可以下载这个编译好的xdebug.so试一试,祝您成功

Global site tag (gtag.js) - Google Analytics