有极速快乐十分吗|极速快乐十分走势图|

PHP调试利器XDebug的安装与使用

XDebug的简单介绍
服务器君一共花费了271.797 ms进行了5?#38382;?#25454;库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,虽然对于有?#25103;?#23500;开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚?#21015;?#29575;高低也可以看出来(当然可能还需要使用一些时间函数)。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢?

在我们平时的php开发中,一个大的项目经过长时间的积累以后你会发现性能越来越慢,而性能到底消耗在了什么地方,常常是一个令人头疼的问题,function a()调用了多少次,function b()又消耗了多少时间,我们到底怎么查找是哪个蛀虫拉慢了我们的程序运行速度呢?在这里给大家介绍一款工具xdebug,相信很多人已经听说过了,希望借助这个工具我们可以起到简单分析php程序性能瓶颈的问题。

XDebug是什么

XDebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试?#22836;?#26512;PHP程序的运行状况。

安装XDebug

  1. 访问?www.xdebug.org?,下载php_xdebug.dll,根据版本号与自己的操作?#20302;場HP版本下载合适的。
  2. 将下载的php_xdebug.dll放到PHP的安装目录php\ext下。
  3. 编辑php.ini,?#34892;?#38598;合环境已?#28304;鴛debug的配置,如果没?#24615;?#33258;己手动加入下面几行:
  4. [xdebug]
    zend_extension = "/home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
    xdebug.auto_trace = on
    xdebug.auto_profile = on
    xdebug.collect_params = on
    xdebug.collect_return = on
    xdebug.profiler_enable = on
    xdebug.trace_output_dir = "/home/ad/xdebug_log"
    xdebug.profiler_output_dir = "/home/ad/xdebug_log"
    

    XDebug?#38382;?#31616;介:

    • zend_extension 加载xdebug扩展
    • xdebug.auto_trace 自动打开打开函数调用监测
    • xdebug.auto_profile 自动打开性能监测
    • xdebug.trace_output_dir 设定函数调用监测信息的输出文件的路径。
    • xdebug.profiler_output_dir 设定效能监测信息输出文件的路径。
    • xdebug.collect_params 打开收集“函数?#38382;?#30340;功能。将函数调用的?#38382;?#20540;列入函数过程调用的监测信息中。
    • xdebug.collect_return 打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。
  5. 重启Apache。
  6. 写一个test.php,内容为<?php phpinfo(); ?>,如果输出的内容中有看到xdebug,说明安装配置成功。或者去/home/ad/xdebug_log下看看是不是日志已经出来了。

设置选项

CategorySettingDescription

?

日志

xdebug.trace_output_dir

日志追踪输出目录
xdebug.trace_output_name日志文件名,xdebug提供了一系列的标识符,生成相应格式的文件名,具体请参考官网
xdebug.trace_options记录添加到文件中方式:1 = 追加(如果存在该文件). 0 (default) = 覆盖(如果存在该文件)
显示数据xdebug.collect_params非零值 = 控制function的?#38382;?#26174;示选项
  • 0 = 不显示.
  • 1 = ?#38382;?#31867;型,值 ?(例如:array(9)).
  • 2 = 同上1,只是在CLI模式下略微有区别
  • 3 = 所有变量内容
  • 4 = 所有变量内容和变量名(例如:array(0 => 9)).
xdebug.collect_return1 = 显示function返回值. Default 0 不显示
xdebug.collect_vars1 = 显示当前作用域使用了哪些变量,显?#39048;?#37327;名,该选项不会记录变量的值,如果需要,使用xdebug.collect_params
xdebug.collect_assignments1 = 添加一行显?#39048;?#37327;赋值(若为1,形如$a = 1;这类Assignment Expression会在trace文件里显示)
格式xdebug.trace_format
  • 0 = 人可读. 从左至右每列分别表示:时间点, 内存, 内存差 (需要设置xdebug.show_mem_delta=1), 等级, 函数名,函数?#38382;?(需要设置,xdebug.collect_params=1,只要是非零), 当前代码行所在文件名 , 行号.
  • 1 = 机器可读[1]. 需要借助第三方app,例如:xdebug trace file parser?或者?xdebug trace viewer
  • 2 = html格式 即table,用browser打开,显示table
xdebug.show_mem_delta1 = 显示每次函数调用内存消耗(内存差)
行为?xdebug.auto_trace1 = 打开自动追踪. (追踪方式有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


一些自定义函数

FunctionDescription
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 = 追?#28216;?#20214;内容末尾, 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,不显示?#29615;?#38646;时,在php执行出错时,显示出错代码所在作用域所有本地变量(注:这会产生大量信息,因此默认是closed),具体显示差别如下图[3]
array xdebug_get_declared_vars()显示当前作用域中已声明的变量
array xdebug_get_code_coverage()显示某一段代码内,代码执行到哪些行[4]

关于xdebug.trace_format=1,如果你使用触发方式启用代码追踪?#28023;▁debug.auto_trace = 0;xdebug.trace_enable_trigger = 1),那么,你可以在URL里添加XDEBUG_TRACE,例如:localhost/test.php?XDEBUG_TRACE,或者localhost//test.php?XDEBUG_TRACE=1(?#25105;?#20540;)。

是不是觉得很麻?#24120;?#37027;么装个插件,让它来帮你。Chrome XDEBUG Helper,使用它,你可以?#35874;?种状态,disabled ,debugging enabled,profiling enabled(下篇详细介绍),然后?#35874;?#21040;debugging enabled。运行该脚本,(去掉URL里的?XDEBUG_TRACE),就可以代码跟踪了。

使用xdebug_start_trace()和xdebug_stop_trace()可以手动追踪你的代码执行情况。

xdebug_start_trace(); 
//your code required to 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,则输出将符合人类阅读习惯(将?#38382;?#35774;为 1 则为机器可读格式)。此外,如果指定 xdebug.show_mem_delta = 1,则可以查看内存使用量是在增加还是在减少,而如果指定 xdebug.collect_params = 4,则可以查?#21019;?#20837;?#38382;?#30340;类型和值。要监?#29992;?#20010;函数返回的值,请设定 xdebug.collect_return = 1。

本文地址:http://www.bavugt.tw/librarys/veda/detail/2333,欢迎访?#35797;?#20986;处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.bavugt.tw/librarys/veda/detail/2333

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示?#32791;?#21487;以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6?#35013;傘?#32473;个具体的数量,那就100本书吧。很多人知识结构不好而?#20063;幌低常?#22240;为在特定领域有一个足够量的知?#35835;?足够?#24049;?#30340;知识结构,?#20302;?#21270;以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体?#24213;?#20197;囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《敏捷软件开发(原则模式与?#23548;?》 马丁 (作者), 邓辉 (译者)

《敏捷软件开发:原则模式与?#23548;酚上?#35465;全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发?#22270;?#38480;编程方面的指?#24076;?#26159;由敏捷开发的创始人之一所撰写的。1.讲述在预算和?#23548;?#35201;求下,软件开发人员和项目经理如何使用敏捷开发完成项目;2.使用真实案例?#27493;?#22914;何用极限编程来设计、测试、重构和结对编程;3.包含了极具价值的可多次使用的C++和JAVA源代码;4.重点讲述了如何使用UML和设计模式解决面向客户?#20302;?#30340;问题。

更多计算机宝库...

有极速快乐十分吗
手机棋牌游戏下载排行榜 淘宝广西快3开奖结果 福彩中奖号码 重庆快乐10分走势图 三直选百位定胆公式 华为彩票安卓 36选7专家预测下期号码 林志颖不靠演艺圈赚钱 十月足彩进球彩赛程 成都纯电货车跑物流赚钱吗