注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿飘的博客

十里平湖霜满天 寸寸青丝愁华年

 
 
 

日志

 
 

php-debug-xdebug-php调试工具  

2011-11-08 16:50:22|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://xdebug.org/
http://pecl4win.php.net/list.php


php.ini:
        extension=php_xdebug.dll
        xdebug.profiler_enable=on
        xdebug.trace_output_dir="D:/www/---test---/xdebug"
        xdebug.profiler_output_dir="D:/www/---test---/xdebug"


相关设置
        xdebug.default_enable = On
        xdebug.show_exception_trace = On
        xdebug.show_local_vars = 1
        xdebug.max_nesting_level = 50
        xdebug.var_display_max_depth = 6

        xdebug.dump_once = On
        xdebug.dump_globals = On
        xdebug.dump_undefined = On
        xdebug.dump.REQUEST = *
        xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT

        xdebug.dump_once、xdebug.dump_globals、xdebug.dump_undefined 和 xdebug.dump_SUPERGLOBAL   设置(其中  SUPERGLOBAL   可以是 COOKIE、FILES、GET、POST、REQUEST、SERVER 或 SESSION)
                用于控制哪些 PHP 超全局变量将被包含在所有诊断结果中.

                将 xdebug.dump_globals 设为 On 以转储名为 xdebug.dump_SUPERGLOBAL 设置中的超全局变量.例如,xdebug.dump_SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT 将打印 PHP 超全局变量 $_SERVER['REQUEST_METHOD']、$_SERVER['REQUEST_URI'] 和 $_SERVER['HTTP_USER_AGENT'].如果需要打印超全局变量数组中的所有值,请使用星号 (*),例如 xdebug.dump_REQUEST=*.如果进一步将 xdebug.dump_undefined 设为 On 并且不设定指定的超全局变量,则仍用值 undefined 打印变量.

                即使捕捉到异常,代码行 xdebug.show_exception_trace = On 仍将强制执行异常跟踪.

        xdebug.show_local_vars = 1
                将打印每个函数调用的最外围中的所有局部变量,包括尚未初始化的变量.
                
        xdebug.var_display_max_depth = 6
                表示转储复杂变量的深度.


跟踪自定义
        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.


出错解决
        PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0

        ;extension=php_xdebug.dll
        zend_extension_ts="d:/php/ext/php_xdebug.dll"      //以zend方式加载
        xdebug.profiler_enable=on
        xdebug.trace_output_dir="D:/www/---test---/xdebug"
        xdebug.profiler_output_dir="D:/www/---test---/xdebug"

        Xdebug具有类似于Java的Exception的“跟踪回溯”的功能,可以根据程序的执行一步步跟踪到出错的具体位置,
        哪怕程序中的调用很复杂,也可以通过这个功能来理清代码关系,迅速定位,快速排错


利用Xdebug使调试信息更加美观
        Xdebug扩展加载后,Xdebug会对原有的某些PHP函数进行覆写,以便好更好地进行Debug.比如var_dump()函数,
        知道通常需要在函数前后加上”<pre>…</pre>”才能够让输出的变量信息比较美观、可读性好.
        但是加载了Xdebug后,不再需要这样做了,Xdebug不但自动给加上了<pre>标签,还给变量加上颜色.
        例:
        <?php
        $arrTest=array(
             "test"=>"abc",
             "test2"=>"abc2"
        );
        var_dump($arrTest);
        ?>


利用Xdebug测试脚本执行时间
        xdebug_time_index()来显示时间

        echo xdebug_time_index();
        sleep(3);echo "<br>";
        echo xdebug_time_index();


测定脚本占用的内存
        想知道程序执行到某个特定阶段时到底占用了多大内存,为此PHP提供了函数memory_get_usage().
        这个函数只有当PHP编译时使用了--enable-memory-limit参数时才有效. 
        Xdebug同样提供了一个函数xdebug_memory_usage()来实现这样的功能,
        另外xdebug还提供了一个xdebug_peak_memory_usage()函数来查看内存占用的峰值.

        echo "<br>";
        echo xdebug_memory_usage();
        echo "<br>";
        echo xdebug_peak_memory_usage();


检测代码中的不足
        有时候代码没有明显的编写错误,没有显示任何错误信息(如error、warning、notice等),但是这不表明代码就是正确无误的.
        有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效率,没有办法直接看出来是哪部份代码出了问题.
        这时候希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析,找到问题所在.
        之前编辑php.ini文件
        加入
        [Xdebug]
        xdebug.profiler_enable=on
        xdebug.trace_output_dir="I:\Projects\xdebug"
        xdebug.profiler_output_dir="I:\Projects\xdebug"

        这几行,目的就在于把执行情况的分析文件写入到”I:\Projects\xdebug”目录中去(可以替换成任何想设定的目录).
        如果执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如cachegrind.out.1169585776这种格式命名的文件.
        这些就是Xdebug生成的分析文件.用编辑器打开可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,需要用图形化的软件来查看.
        在Windows平台下,可以用WinCacheGrind(下载地址http://sourceforge.net/projects/wincachegrind/)这个软件来打开这些文件.
        可以直观漂亮地显示其中内容:

        testXdebug();
        function testXdebug() {
               requireFile();
        }

        function requireFile() {
               require_once('abc.php');
        }

        很直观地看到index.php中调用了一个函数testXdebug(),testXdebug()中又调用了requireFile()函数.这样就可以非常方便地查看整个脚本的程序结构.
        另外,还可以看到每个函数被调用的次数及执行所花费的时间!这对于测试程序性能非常有用.
  评论这张
 
阅读(1452)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017