很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,虽然对于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以看出来(当然可能还需要使用一些时间函数)。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢?
在我们平时的php开发中,一个大的项目经过长时间的积累以后你会发现性能越来越慢,而性能到底消耗在了什么地方,常常是一个令人头疼的问题,function a()调用了多少次,function b()又消耗了多少时间,我们到底怎么查找是哪个蛀虫拉慢了我们的程序运行速度呢?在这里给大家介绍一款工具xdebug,相信很多人已经听说过了,希望借助这个工具我们可以起到简单分析php程序性能瓶颈的问题。
XDebug是什么
XDebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。
安装XDebug
- 访问www.xdebug.org,下载php_xdebug.dll,根据版本号与自己的操作系统、PHP版本下载合适的。
- 将下载的php_xdebug.dll放到PHP的安装目录php\ext下。
- 编辑php.ini,有些集合环境已自带xdebug的配置,如果没有则自己手动加入下面几行:
2 |
zend_extension = "/home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
|
4 |
xdebug.auto_profile = on |
5 |
xdebug.collect_params = on |
6 |
xdebug.collect_return = on |
7 |
xdebug.profiler_enable = on |
8 |
xdebug.trace_output_dir = "/home/ad/xdebug_log"
|
9 |
xdebug.profiler_output_dir = "/home/ad/xdebug_log"
|
XDebug参数简介:
- zend_extension 加载xdebug扩展
- xdebug.auto_trace 自动打开打开函数调用监测
- xdebug.auto_profile 自动打开性能监测
- xdebug.trace_output_dir 设定函数调用监测信息的输出文件的路径。
- xdebug.profiler_output_dir 设定效能监测信息输出文件的路径。
- xdebug.collect_params 打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。
- xdebug.collect_return 打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。
- 重启Apache。
- 写一个test.php,内容为<?php phpinfo(); ?>,如果输出的内容中有看到xdebug,说明安装配置成功。或者去/home/ad/xdebug_log下看看是不是日志已经出来了。
设置选项
Category
Setting
Description
日志
|
xdebug.trace_output_dir
|
日志追踪输出目录 |
xdebug.trace_output_name |
日志文件名,xdebug提供了一系列的标识符,生成相应格式的文件名,具体请参考官网 |
xdebug.trace_options |
记录添加到文件中方式:1 = 追加(如果存在该文件). 0 (default) = 覆盖(如果存在该文件) |
显示数据 |
xdebug.collect_params |
非零值 = 控制function的参数显示选项
- 0 = 不显示.
- 1 = 参数类型,值 (例如:array(9)).
- 2 = 同上1,只是在CLI模式下略微有区别
- 3 = 所有变量内容
- 4 = 所有变量内容和变量名(例如:array(0 => 9)).
|
xdebug.collect_return |
1 = 显示function返回值. Default 0 不显示 |
xdebug.collect_vars |
1 = 显示当前作用域使用了哪些变量,显示变量名,该选项不会记录变量的值,如果需要,使用xdebug.collect_params |
xdebug.collect_assignments |
1 = 添加一行显示变量赋值(若为1,形如$a = 1;这类Assignment Expression会在trace文件里显示) |
格式 |
xdebug.trace_format |
- 0 = 人可读. 从左至右每列分别表示:时间点, 内存, 内存差 (需要设置xdebug.show_mem_delta=1), 等级, 函数名,函数参数 (需要设置,xdebug.collect_params=1,只要是非零), 当前代码行所在文件名 , 行号.
- 1 = 机器可读[1]. 需要借助第三方app,例如:xdebug trace file parser或者xdebug
trace viewer
- 2 = html格式 即table,用browser打开,显示table
|
xdebug.show_mem_delta |
1 = 显示每次函数调用内存消耗(内存差) |
行为 |
xdebug.auto_trace |
1 = 打开自动追踪. (追踪方式有2种,一种是自动追踪,所有php脚本运行时,都会产生trace文件;另一种是触发方式追踪,如下) |
xdebug.trace_enable_trigger[2] |
1 = 使用 XDEBUG_TRACE GET/POST 触发追踪, 或者通过设置cookie XDEBUG_TRACE. 为了避免每次请求时,都会生成相应trace追踪文件,你需要把auto_trace设置为0
注:该特性只在2.2+版本才能设置
[xdebug-general] Re: Is trace_enable_trigger defunct?
|
限制 |
xdebug.var_display_max_depth |
数组和对象元素显示深度:主要用在数组嵌套,对象属性嵌套时,显示几级的元素内容. Default 3. |
xdebug.var_display_max_data |
变量值为字符串时显示多长. Default 512. |
xdebug.var_display_max_children |
数组和对象元素显示的个数. Default 128
|
一些自定义函数
Function
Description
void xdebug_enable() |
手动打开,相当于xdebug.default_enable=on |
void var_dump() |
覆写php提供的var_dump,出错时,显示函数堆栈信息,(前提:php.ini里html_errors为1),使用xdebug.overload_var_dump 设置是否覆写 |
void xdebug_start_trace(
string trace_file_path
[, integer options] ) |
手动控制需要追踪的代码段
trace_file_path :文件路径(相对或绝对,若为空).如果为空,或者不传参, 使用xdebug.trace_output_dir设置的目录
options :
- XDEBUG_TRACE_APPEND: 1 = 追加文件内容末尾, 0 = 覆写该文件
- XDEBUG_TRACE_COMPUTERIZED:
- 2 =同 xdebug.trace_format=1 .
- XDEBUG_TRACE_HTML: 4 = 输出HTML表格,浏览器打开为一table
|
void xdebug_stop_trace() |
停止追踪,代码追踪在该行停止 |
string xdebug_get_tracefile_name() |
获得输出文件名,与xdebug.auto_trace配合使用. |
void xdebug_var_dump([mixed var[,...]]) |
输出变量详细信息,相当于php里的var_dump,具体显示请看这里
|
xdebug.show_local_vars |
默认为0,不显示;非零时,在php执行出错时,显示出错代码所在作用域所有本地变量(注:这会产生大量信息,因此默认是closed),具体显示差别如下图[3] |
array xdebug_get_declared_vars() |
显示当前作用域中已声明的变量 |
array xdebug_get_code_coverage() |
显示某一段代码内,代码执行到哪些行[4] |
关于xdebug.trace_format=1,如果你使用触发方式启用代码追踪:(xdebug.auto_trace = 0;xdebug.trace_enable_trigger = 1),那么,你可以在URL里添加XDEBUG_TRACE,例如:localhost/test.php?XDEBUG_TRACE,或者localhost//test.php?XDEBUG_TRACE=1(任意值)。
是不是觉得很麻烦,那么装个插件,让它来帮你。Chrome XDEBUG Helper,使用它,你可以切换3种状态,disabled ,debugging enabled,profiling enabled(下篇详细介绍),然后切换到debugging enabled。运行该脚本,(去掉URL里的?XDEBUG_TRACE),就可以代码跟踪了。
使用xdebug_start_trace()和xdebug_stop_trace()可以手动追踪你的代码执行情况。
设定 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。
分享到:
相关推荐
PHP调试工具Xdebug安装配置教程,使用起来很方便
php调试工具xdebug的安装、配置和使用 本文档全部手工编写,基于php5.4版本,zendsdutio 10.0版本,增加了xdebug调试工具的配置和是,欢迎下载,希望能对你有帮助 如果对您有帮助,多谢给个好评。
详细介绍了Zend Studio 9.0.0 PHP调试工具Xdebug的安装,并附有安装插件php_xdebug-2.2.4-5.3-vc9.dll
信用java,或者nodejs的人,一定体会过用断点调试来查找程序错误的优点与方便。php也有断点调试功能,就是配置起来有一些麻烦。 GOOGLE浏览器+XDEBUG进行PHP断点调试
netbeans配置及xdebug 调试 单元调试 单独流程调试
使用xdebug调试PHP程序.doc
zend studio php 调试插件 xdebug-2.2.3-5.2-vc9
PHP调试,使用Komodo和Xdebug进行PHP程序的调试 PHP调试,使用Komodo和Xdebug进行PHP程序的调试 PHP调试,使用Komodo和Xdebug进行PHP程序的调试 PHP调试,使用Komodo和Xdebug进行PHP程序的调试
这是几个文件用于使用notepad++和xdebug来调试php程序
关于PHP调试XDebug工具的使用方法 大全
关于xdebug的安装及设置网上教程很多,通过实践发现网上的很多信息有误,特记录一个相对简单清晰的说明,希望能帮助到有需要的人。
php100-101PHP5.3 Xdebug 调试器配置与应用.rar
1.检查phpstudy_x64是否安装在默认目录,即:D:\phpstudy_pro\ 2.复制php8.1.1nts文件夹到:D:\phpstudy_pro\Extensions\php 备注:如果非默认目录,可自行修改php.ini文件,将文件中的:extension_dir = "D:\...
开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用xdebug来远程调试呢?下面通过本篇文章给大家介绍php xdebug远程调试方法...
PHP调试,使用Komodo和Xdebug进行PHP程序的调试(2) PHP调试,使用Komodo和Xdebug进行PHP程序的调试(2) PHP调试,使用Komodo和Xdebug进行PHP程序的调试(2) PHP调试,使用Komodo和Xdebug进行PHP程序的调试(2)
xdebug helper chrome插件是一款PHP CHROME调试插件,与Zend Studio,WAMPSERVER协同工作,易于调试、分析和扩展Xdebug跟踪,有需要的赶快下载吧!
NetBeans,XDebug调试PHP教程
php调试之Netbeans + xdebug 配置全攻略,解决遇到Netbeans总是提示”正在等待连接”错误。
Xdebug安装 下载xdebug扩展的时候注意xdebug的版本与php版本相对应,不然出现不必要的麻烦! 我自己使用的是PHP5.2.5,下载的xdebug文件名为:php_xdebug-2.0.3-5.2.5.dll,将文件放到php/ext文件夹下即可 3.配置 ...
PHPSTORM XMAPP XDEBUG 整合PHP 调试开发