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

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

阅读更多

于是,转移到另一台安装 Windows Server 2003 + PHP5.2.5 的机器,按照前述的步骤,安装 Xdebug 2.1.0。可以看到 phpinfo 中的 Xdebug 信息了。但运行“php -v”命令,结果如下:

E:\usr\local\php-5.2.5>php -v
PHP Warning: PHP Startup: SVWh: Unable to initialize module
Module compiled with module API=20020429, debug=0, thread-safety=1
PHP compiled with module API=20060613, debug=0, thread-safety=1
These options need to match in Unknown on line 0

还是有错误,但毕竟 Xdebug 开始工作了。

一、前文 xdebug.* = On/Off 等配置语句的说明

参数解释:

zend_extension
加载 Xdebug 这个 zend 扩展模块。这里不能用extension=php_xdebug.dll的方式加载,必须要以 zend extension 的方式加载,否则安装上后,phpinfo是显示不出xdebug这个项的。

xdebug.auto_trace
自动打开“监测函数调用过程”的功能。该功能可以在你指定的目录中将函数调用的监测信息以文件的形式输出。此配置项的默认值为off。

xdebug.collect_params
打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。此配置项的默认值为off。

xdebug.collect_return
打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。此配置项的默认值为off。

xdebug.trace_output_dir
设定函数调用监测信息的输出文件的路径。

xdebug.profiler_enable
打开基准测试器。对应用程序整体范围有效。
只有在必要时才使用应用程序范围的基准测试特性,因为它向PHP脚本添加了很多额外消耗。基准测试文件还占用很多的磁盘存贮空间。

xdebug.profiler_output_dir
设定基准测试信息输出文件的路径。文件中保存了 PHP 脚本执行过程中调用过的函数以及每个函数分别被调用了多少次的信息。

还有一些更为具体的参数设定,详见 Xdebug 官网:http://www.xdebug.org/docs-settings.php

二,几个示例,使用 Xdebug 跟踪代码执行

运行以下 PHP 代码(文件名 xdebug1.php):

<?php
class MyClass
{
public function myCaller($other)
{
$other->myCallee(); //第6行
}
}

class MyOtherClass
{
public function myCallee()
{
printf("%s", xdebug_call_class());
printf("::%s", xdebug_call_function());
printf(" in %s", xdebug_call_file());
printf(":%s\n", xdebug_call_line());
}
}

$a = new MyClass();
$b = new MyOtherClass();
$a->myCaller($b);
?>

输出以下信息:
MyClass::myCaller in D:\_myPHP5\htdocs\xdebug1.php:6

注意代码里的以“xdebug_”打头的函数,这是 Xdebug 的扩展函数。因为作为 Zend 扩展(注意 Zend 扩展与 PHP 扩展的不同),Xdebug 已经被加载到 PHP 引擎之中,所以它的函数作为全局函数可以在任何地方调用。以上示例代码的输出信息就是由 Xdebug 函数的输出拼接而成的。

Xdebug 加载后,所有运行的 PHP 代码的状态信息都被 Xdebug 跟踪和记录了,被保存为 trace.*.xt 文件和 cachegrind.out.* 文件。

还可以调用 xdebug_get_function_stack() 函数,它会返回到这一点为止的关于函数调用信息的一个数组。这个函数与普通的 PHP 函数 debug_backtrace() 很相似。

当需要确定某段脚本两点之间调用过的所有函数和方法,就可以使用 Xdebug 函数跟踪功能。这时,需要设定 xdebug.auto_trace = off。

启动和停止跟踪功能的函数:

void xdebug_start_trace(string filename [, int options])
这个函数用来启动跟踪函数调用。filename 表示生成的跟踪文件,应该是物理全路径。options值是一个位掩码值,它允许使用XDEBUG_TRACE_APPEND常量添加跟踪记录文件,使用XDEBUG_TRACE_COMPUTERIZED常量创建计算出的结果的输出格式,甚至可以使用XDEBUG_TRACE_HTML常量创建一个HTML格式的表格跟踪记录。

void xdebug_stop_trace()
停止跟踪功能。如果不调用stop函数,跟踪功能将在执行过程结束时自动停止。

示例代码,跟踪对象的方法调用:

xdebug_start_trace(dirname(__FILE__) . '\trace');
$a->myCaller($b);
xdebug_stop_trace();

这个例子会在当前路径下生成 trace.xt 跟踪记录文件。

三、查看跟踪记录文件和应用程序范围的基准测试文件

跟踪记录文件比较容易阅读和理解,例如:

TRACE START [2010-07-06 19:31:48]
0.0019 67608 -> {main}() D:\_myPHP5\htdocs\xdebug1.php:0
0.0021 68296 -> MyClass->myCaller(class MyOtherClass) D:\_myPHP5\htdocs\xdebug1.php:23
0.0022 68464 -> MyOtherClass->myCallee() D:\_myPHP5\htdocs\xdebug1.php:6
0.0022 68720 -> xdebug_call_class() D:\_myPHP5\htdocs\xdebug1.php:14
>=> 'MyClass'
0.0024 68776 -> printf(string(2), string(7)) D:\_myPHP5\htdocs\xdebug1.php:14
>=> 7
………… ………… …………
>=> 6
0.0032 69120 -> printf(string(4), long) D:\_myPHP5\htdocs\xdebug1.php:17
>=> 3
>=> NULL
>=> NULL
>=> 1
0.0118 zu
TRACE END [2010-07-06 19:31:48]

但基准测试文件 cachegrind.out.* 就不同了,它的数据表示晦涩难懂,判若天书,例如:

version: 0.9.6
cmd: D:\_myPHP5\htdocs\xdebug1.php
part: 1

events: Time

fl=php:internal
fn=php::xdebug_call_class
14 5
……

fl=D:\_myPHP5\htdocs\xdebug1.php
fn=MyOtherClass->myCallee
6 146469
cfn=php::xdebug_call_class
calls=1 0 0
14 5
……

fl=D:\_myPHP5\htdocs\xdebug1.php
fn=MyClass->myCaller
23 357
cfn=MyOtherClass->myCallee
calls=1 0 0
6 161702

fl=D:\_myPHP5\htdocs\xdebug1.php
fn={main}

summary: 309298

0 147238
cfn=MyClass->myCaller
calls=1 0 0
23 162060

由于基准测试文件 cachegrind.out.* 的内容不易理解,所以我们需要一个工具来读取它。Windows 下有一款这样的软件:WinCacheGrind。

WinCacheGrind 可以到 http://sourceforge.net/projects/wincachegrind/ 下载安装。WinCacheGrind 是个绿色软件,可以直接双击运行。截至2010年8月份,其最后版本是 10.0.0.14,最后发行年份是2005年。

运行 WinCacheGrind 后,点击 Tools->options,设定你的 Working folder(php.ini里xdebug.profiler_output_dir的值)。这样就可以比较直观的查看基准测试文件的信息了。这些信息包括函数执行的时间、被调用的次数等等细节,便于我们分析代码的性能。

另外,还可以使用另一个工具软件 Webgrind 来查看和分析数据。看看名字就会猜到,Webgrind 是一个 Web 程序。它是用 PHP 编写的,可以部署在网站上,不用每台客户端都安装软件,方便多了。

可以从 Webgrind 官网 http://code.google.com/p/webgrind/ 下载,然后解压部署在 Web 目录下,配置一下 config.php 文件,指定存储输出数据的目录,就可以运行了。

配置好 Xdebug 后,PHP 页面的出错信息更人性化了,在页面里以表格的形式体现。

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

分享到:
评论

相关推荐

    windows下安装Xdebug+WinCacheGrind

    在Windows环境下,安装Xdebug和WinCacheGrind是开发者为了进行PHP性能分析的重要步骤。Xdebug是一个强大的PHP扩展,主要用于调试和性能分析,而WinCacheGrind则是一个可视化的工具,用于解析Xdebug生成的profiling...

    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 helper chrome插件以及安装步骤详解

    2. **找到Xdebug Helper**: 在搜索结果中,你会看到一个名为 "Xdebug Helper" 的插件,通常由 "EasyXdebug" 开发团队提供。确保选择最新版本,例如在本例中是 "xdebug helper-1.4.3"。 3. **安装插件**: 点击 "添加...

    安装xdebug 扩展

    2. **下载Xdebug**:访问Xdebug官网(https://xdebug.org/)选择适合你PHP版本的Xdebug二进制文件,或使用Composer进行安装。 3. **配置Xdebug**:将下载的Xdebug扩展解压后,将其复制到PHP的`ext`目录下。然后,...

    xdebug-3.1.0 用来debug

    - 安装 Xdebug 通常需要通过 PECL 包管理器或者手动编译。对于 Xdebug 3.1.0,你需要先确保你的 PHP 版本与之兼容。 - 配置 Xdebug 需要编辑 `php.ini` 文件,添加或修改适当的配置项,如 `zend_extension` 指定...

    PHP_XDEBUG for windows

    PHP_Xdebug是一款强大的PHP调试工具,尤其在Windows环境下与WAMP(Windows Apache MySQL PHP)服务器组合使用时,它为开发者提供了更深入的错误检测和调试功能。Xdebug不仅有助于捕获运行时错误,还能提供详细的堆栈...

    xdebug helper调试插件

    2. **配置 Xdebug**:在服务器端,需安装并配置 Xdebug 扩展,设置适当的配置参数如 `xdebug.remote_enable` 和 `xdebug.idekey`,使其与 Xdebug Helper 插件匹配。 3. **启用/禁用调试**:在浏览器中,点击 Xdebug...

    xdebug 安装,调试 版本php7.3.4

    xdebug 安装,调试 版本php7.3.4

    php xdebug 插件及全面安装教程

    对于IDE如VSCode或PHPStorm,需要安装相应的Xdebug插件,并配置调试配置。例如,VSCode中创建`.vscode/launch.json`文件,添加如下内容: ```json { "version": "0.2.0", "configurations": [ { "name": ...

    xdebug-3.1.0beta2.tgz

    安装Xdebug 3.1.0beta2的步骤通常涉及以下几个关键环节: 1. **系统要求**:首先,确保你的服务器环境符合Xdebug的运行条件,这通常意味着你的PHP版本需与Xdebug兼容。Xdebug 3.1.0beta2可能需要PHP 7.4或更高版本...

    php7.X+PhpStorm2019.X+宝塔linux xdebug远程调试环境的安装及设置

    在本篇文章中,我们将详细讲解如何在 PHP 7.X 环境下,使用宝塔 Linux 和 PhpStorm 2019.X,安装和设置 xdebug 远程调试环境。 一、环境说明 在本篇文章中,我们将使用两台主机,一台是服务器端,装有 Centos 操作...

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

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

    php调试之Netbeans + xdebug 配置全攻略

    ### PHP调试之Netbeans + xdebug配置全攻略 在PHP开发过程中,经常需要对代码进行调试来确保程序的正确性和高效性。对于PHP开发者来说,一个强大的集成开发环境(IDE)加上一个高效的调试器是非常重要的工具组合。...

    xdebug-2.0.4.tgz

    如何安装Xdebug? 以PHP5.1.4,Windows平台为例(其它PHP版本,其它平台请参看官网文档): 1. 登录www.xdebug.org,在首页右侧有一个Windows modules,选择其中的PHP5.1.2+,下载php_xdebug-5.1.2-2.0.0beta6.dll...

    Xdebug配置和PHPStorm配置

    本文详细介绍了Xdebug的安装配置过程以及如何与PHPStorm配合使用进行高效的代码调试。通过以上步骤,开发人员可以充分利用Xdebug的强大功能,提高开发效率,同时也能更好地理解代码执行流程及性能瓶颈。

    CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录

    5. 安装XDebug: - XDebug是PHP的一个调试工具,它提供了丰富的调试功能,比如堆栈跟踪、变量查看、错误捕获等。文章指导如何从官方网站下载XDebug的源码包,解压后通过`phpize`来配置环境,并进行编译安装。安装...

    xdebug-5.6.zip

    2. 将Xdebug库编译并安装到PHP的扩展目录。 3. 编辑php.ini文件,添加或修改Xdebug的配置项,如`zend_extension=xdebug.so`(路径可能因系统而异)以及调试和性能相关的配置,例如`xdebug.remote_enable=1`、`xdebug...

    php xdebug5.6

    zend_extension=xdebug.so # Windows下可能为xdebug.dll,路径需对应实际位置 xdebug.default_enable=1 xdebug.remote_enable=1 xdebug.remote_host=localhost xdebug.remote_port=9000 xdebug.idekey="PHPSTORM" # ...

Global site tag (gtag.js) - Google Analytics