常用配置

xdebug.var_display_max_children
整数类型,默认值128。用于控制通过xdebug_var_dump(),var_dump()方法时显示数组中子数组的个数或对象中属性的个数,设定为-1关闭该限制。

xdebug.var_display_max_data
整数类型,默认值521。用于控制xdebug_var_dump(),var_dump()方法时显示输出的字符串的长度,设定为-1关闭该限制。

xdebug.var_display_max_depth
整数类型,默认值3。用于控制通过xdebug_var_dump(),var_dump()方法时打印数组或对象时显示的层数,即深度。可设定的最大值为1023,也可以将其设定为-1以达到设定最大值的效果。

xdebug.collect_params
整数类型,默认值0。如果一个方法的访问记录被跟踪时,打开该选项,会同时记录传递给该方法的所有参数信息。可设定一下值:
0 关闭
1 记录参数的类型和长度,如 string(6), array(8)
2 Type and number of elements, with a tool tip for the full information
3 Full variable contents (with the limits respected as set by xdebug.var_display_max_children,xdebug.var_display_max_data and xdebug.var_display_max_depth.
4 Full variable contents and variable name.

xdebug.collect_vars
布而类型,默认值0。用于收集当前作用域下哪些变量被使用。

常用方法

void xdebug_debug_zval( [string varname [, ...]] )
用于打印一个或多个变量结构的相关信息。包括变量类型,值以及变量引用次数。如果传递的是一个数组,则会递归数组中的所有元素。

void xdebug_dump_superglobals()
该方法用于打印出所有通过xdebug.dump.*配置属性在php.ini文件中指定的所有全局变量信息,如,在php.ini文件中增加如下配置信息:

1 xdebug.dump.GET=*
2 xdebug.dump.SERVER=REMOTE_ADDR

在代码中通过调用xdebug_debug_zval()方法打印出GET下的所有变量信息以及SERVER['REMOTE_ADDR']变量信息。

array xdebug_get_declared_vars()
返回一个数组,包含当前作用域下的所有变量名称,需要打开xdebug_collect.vars配置。

array xdebug_get_function_stack()
一次打印出出调用xdebug_get_function_stack()方法所在的方法的所有方法调用信息。

integer xdebug_get_stack_depth()
返回当前栈的深度,main()深度为0

xdebug跟踪

xdebug可以将文件的运行流程及情况输出到日至文件中,通过访问这写文件,可以获取项目代码的运行流程以及相关一些信息,如内存使用率,内存峰值,执行时间等等。
输出到日至中的书写格式可以分为三种:易于阅读的格式,机器容易解析的格式以及HTML格式,可以通过xdebug.trace_format属性进行控制,其值有一下三种:
1 shows a human readable indented trace file with: time indexmemory usagememory delta (if the settingxdebug.show_mem_delta is enabled), levelfunction namefunction parameters (if the settingxdebug.collect_params is enabled), filename and line number.
2 writes a computer readable format which has two different records. There are different records for entering a stack frame, and leaving a stack frame. The table below lists the fields in each type of record. Fields are tab separated.
3 writes a trace formatted in (simple) HTML.
同样,输出结果也会受到其他一些配置选项的影响,如xdebug.collect_paramsxdebug.collect_returnxdebug.collect_assignments
为VIM添加解析日至文件的语法高亮功能:
首先将源代码文件夹下的contrib/xt.vim复制 ~/.vim/syntax目录下
然后编辑 ~/.vim/filetype.vim 并加入一下代码:

1 augroup filetypedetect
2 au BufNewFile,BufRead *.xt setf xt
3 augroup END

此时在使用vim打开生成的日志文件,即可看见对日志文件的格式化和高亮显示。

代码跟踪相关配置选项:
xdebug.auto_trace
boolean类型,默认值0。用于设定在脚本运行前是否自动跟踪方法的调用信息。

xdebug.collect_assignments

xdebug.collect_return
boolean类型,默认值0。用于设定是否返回调用方法的返回值。

xdebug.show_mem_delta
boolean类型,默认值0。如果启用该选项,并且输出格式为易于阅读式,则会在日志文件中显示调用两个方法之间的内存使用差异情况。

xdebug.trace_enable_trigger
boolean类型,默认值0。如果开启该选项,可以通过向POST或GET传递XDEBUG_TRACE参数来启用系统跟中功能,或者设定一个名为XDEBUG_TRACE的cookie信息,为了防止每次请求都会生成一个日志文件,需要将xdebug.auto_track设置为0。

xdebug.trace_format

xdebug.trace_options
boolean类型,默认值0。如果启用该选项,则之后的请求生成的日志信息会追加到日志文件中而不是替换当前日志文件中的内容。

xdebug.trace_output_dir
字符串类型,用于设定保存日志文件的路径信息

xdebug.trace_output_name
用于设定生成的日志文件的名字。

利用xdebug检测项目性能

xdebug提供了一个叫profiler的功能,可以用来检测项目的性能,以便能够找出项目的瓶颈,使用该功能,首先需要了解一些配置参数:

xdebug.profiler_enable
boolean类型,默认值0。用于设定是否开启生成报告文件,如果设定为1,每次请求都会生成一个性能报告文件。

xdebug.profiler_enable_trigger
boolean类型,默认值0。如果开启该选项,则在每次请求中如果GET/POST或cookie中包含XDEBUG_PROFILE变量名,则才会生成性能报告文件(前提是必须关闭xdebug.profiler_enable选项,否则该选项不起作用)。

xdebug.profiler_output_dir
字符串类型。用于设定生成的报告文件的存放的路径。

xdebug.profiler_output_name
字符串类型。用于设定生成的报告文件的名字,如cachegrind.out.%t.%p

查看生成的性能分析文件
可以通过KCacheGrind工具用来打开生成的报告文件,ubuntu下安装该工具:

1 sudo apt-get install kcachegrind

或者使用webgrind,网页版的KCacheGrind。
修改webgrind/config.php下的$storageDir属性='./tmp';将生成的图片文件保存到webgrind/tmp目录下而不是/tmp下。
修改$dotExecutable='dot';

在上述说到的生成方法跟踪报告和系统性能报告,大部分时候会选择手动选择是否生成报告文件,即开启*_enable_trigger选项,这是当需要生成报告时,通过手动添加需要传递的参数来生成报告文件。
可通过向浏览器添加xdebug插件来快速设定这些选项:
chrome:https://chrome.google.com/extensions/detail/eadndfjplgieldjbigjakmdgkmoaaaoc.
firefox:https://addons.mozilla.org/en-US/firefox/addon/58688/.

 
分类: PHP

xdebug使用说明的更多相关文章

  1. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  2. phpstorm 配置 xdebug调试工具

    前言   php是脚本型程序 每次出错都要手动exit断点程序不是很方便 哪里有需求哪里就有生产,Xdebug可以实现对php的断点调试.下面将我个人的安装经历分享给大家. 运行环境 windows ...

  3. xdebug断点调试原理

    通过Xdebug进行远程调试时,PHPSTORM等IDE会监听Xdebug设置的调试ip和端口(php.ini中配置) [xdebug] ; Xdebug zend_extension=php_xde ...

  4. PHP的学习--在Atom中使用XDebug(Mac)

    之前写过一篇博客<PHP的学习--在sublime中使用XDebug(Ubuntu)>,讲了在Ubuntu系统 sublime 中配置 XDebug,其实配置好之后,我也很少用,原因有两点 ...

  5. xDebug + webgrind 对 php 程序进行性能分析

    环境 macOs Sierra php 7.0.8 MAMP Pro 集成环境 背景 最近有一个需要在微信朋友圈上线的 h5,本人做了一个抽奖的接口,也没多想,直接上 php ci(CodeIgnit ...

  6. PhpStorm集成xdebug进行断点调试

    本文介绍如何使用PhpStorm集成xdebug在本地开发环境进行断点调试的技巧. 我配置的环境是:Windows10 + PhpStorm10.0.1 + PHP5.6. 1. 下载xdebug的扩 ...

  7. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  8. php调试工具——XDebug使用

    下面以windows平台和Aptana Studio为例,介绍XDdebug的使用. 1.安装XDebug 1)下载php的XDebug扩展.dll文件,官网下载地址是https://xdebug.o ...

  9. zend studio 13.5破解以及集成xdebug

    环境说明: 操作系统:Windows 7 Ultimate Edition Service Pack 1 PHP:7.0.11 TS Zend Studio:13.5.0 Xdebug:2.5.0 一 ...

随机推荐

  1. SCALA表达示简例

    作了解,感觉比一般的差距有点大哟. package com.hengheng.scala class HelloScala { } object HelloScala { def main(args: ...

  2. 手工走一次OPENSTACK安装,掉一层皮啊

    掉皮也是值得的,对OS的了解慢慢加深. 最近加入CS的Q群也学到不少.

  3. bit和sbit的区别

    1.bit和sbit都是C51扩展的变量类型. bit和int char之类的差不多,只不过char=8位, bit=1位而已.都是变量,编译器在编译过程中分配地址.除非你指定,否则这个地址是随机的. ...

  4. VIJOS P1543极值问题

    已知m.n为整数,且满足下列两个条件:① m.n∈1,2,…,K② (n^ 2-mn-m^2)^2=1编一程序,对给定K,求一组满足上述两个条件的m.n,并且使m^2+n^2的值最大.例如,若K=19 ...

  5. Ubuntu中Samba的安装配置和使用[图文]

    Samba服务在Ubuntu服务器版本中默认并没有安装. 1. Samba软件包的安装 使用源安装,在终端中输入如下命令: #sudo apt-get install samba#sudo apt-g ...

  6. loadrunner11 安装及破解教程来自百度文库

    http://wenku.baidu.com/link?url=wSdgdZPzSNkftIqPmuz2rLKJ0M7Q3RrfSEdqcoRzfVDMIikj_7OLmLZWgoCiBev3AxvN ...

  7. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  8. AOJ 0121 广度优先搜索

    题意:7数码问题.在2×4的棋盘上,摆有7个棋子,每个棋子上标有1至7的某一数字,不同棋子上标的数字不相同.棋盘上还有一个空格(用0表示),与空格相邻(上下左右)的棋子可以移到空格中,该棋子原先位置成 ...

  9. DHTML【6】--CSS

    从今天开始,我们迎来了一个新的面孔---CSS,二者这也是一个漂亮的面孔,为什么说这是一个漂亮的面孔呢?因为CSS是做特效的,可以美化HTML页面,我们看到淘宝网.网易首页等网站都非常好看,那都是一些 ...

  10. js打开新的链接2

    window.open打开新的连接时可能会被浏览器拦截掉. 所以采用动态创建a标签的形式. var a = document.createElement('a');  a.href = myUrl;  ...