用Xdebug修正PHP应用程序中的错误
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.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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |