快速业务通道

用Xdebug修正PHP应用程序中的错误

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
ren'' =>
  array
   0 =>
    object(person)
     var ''name'' => string ''Joe'' (length=3)
     var ''surname'' => string ''Smith'' (length=5)
     var ''age'' => int 4
     var ''children'' =>
       array
       empty
   1 =>
    object(person)
     var ''name'' => string ''Jane'' (length=4)
     var ''surname'' => string ''Smith'' (length=5)
     var ''age'' => int 6
     var ''children'' =>
       array
       empty

如果结合使用 Xdebug 与 PHP V5 类,转储包括 public、private 和 protected 之类的属性。

跟踪代码

解决错误 —— 如解开神秘谋杀之谜 —— 通常要求构造详细的时间线。例如,内存泄漏通常不会把 自身表明为一个错误计算。相反,操作将正常进行,直至内存用尽,然后应用程序突然终止。如果内存泄 漏由于某些请求而恶化,可能会不断出现错误并且难以预测。在内存使用量与时间之间建立映射的时间线 将揭示泄漏的严重程度。一条精细的时间线 —— 比如,从函数到函数 —— 将进一步指出泄漏源。

Xdebug 可以提供一条详细的时间线进行执行跟踪。当跟踪被启用后,Xdebug 将记录所有函数调用, 包括每个函数的参数和返回值。您可以将每个日志或跟踪 的格式设为符合人类阅读习惯或者机器可读的 格式。您最好使用前者,虽然您可能编写独立而特定的应用程序来分析后者。

同转储一样,Xdebug 有若干个 php.ini 选项用于自定义跟踪内容。例如,下面一批设置将生成最详 细的输出。

清单 8. 跟踪自定义

xdebug.trace_format = 0
xdebug.auto_trace = On
xdebug.trace_output_dir = /tmp/traces
xdebug.trace_output_name = trace.%c.%p
xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On

设定 xdebug.auto_trace = 1 将在执行所有 PHP 脚本之前先启用自动跟踪。另外,您可以通过代码 设定 xdebug.auto_trace = 0,并分别使用 xdebug_start_trace() 和 xdebug_stop_trace() 函数启用 和禁用跟踪。但是,如果 xdebug.auto_trace 为 1,则可以在包括配置好的 auto_prepend_file 之前先 启动跟踪。

选项 xdebug.trace_ouput_dir 和 xdebug.trace_output_name 用于控制保存跟踪输出的位置。在这 里,所有文件都被保存到 /tmp/traces 中,并且每个跟踪文件都以 trace 为开头,后接 PHP 脚本的名 称(%s)以及进程 ID(%p)。所有 Xdebug 跟踪文件都以 .xt 后缀结尾。

默认情况下,Xdebug 将显示时间、内存使用量、函数名和函数调用深度字段。如果将 xdebug.trace_format 设为 0,则输出将符合人类阅读习惯(将参数设为 1 则为机器可读格式)。此外 ,如果指定 xdebug.show_mem_delta = 1,则可以查看内存使用量是在增加还是在减少,而如果指定 xdebug.collect_params = 4,则可以查看传入参数的类型和值。要监视每个函数返回的值,请设定 xdebug.collect_return = 1。

接下来看另外一个示例。创建 /tmp/traces 目录,然后用 mkdir /tmp/traces; chmod a+rwx /tmp/traces 将其模式更改为能够被任何用户阅读的文件(world-readable)和能够被任何用户写入的文 件(world-writable)(如果您不愿共享 traces 目录,请确保至少 Web 服务器用户 —— 通常为 www 或任何人 —— 可以将数据写入该目录)。将以上跟踪设置添加到 php.ini 文件中,重新启动 Web 服务 器,然后把浏览器再次指向 phpinfo() 应用程序。整个跟踪应当类似清单 9 所示:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号