PHP debug 环境配置

1. 关于代码覆盖率

衡量代码覆盖率有很三种档期的顺序,比方行覆盖率,函数/方法覆盖率,类覆盖率,分支覆盖率等等。代码覆盖率也是权衡测量试查验质量量的一个重大标准,对于黑盒测验来讲,假设你不鲜明本身的测量试验用例是还是不是真的跑过了系统内部的每生龙活虎行代码,在测验的完整性上海市总要打些折扣。因而,产业界大致对种种编程语言皆有和好的黄金年代套代码覆盖率解决方案。世界上最美的语言PHP当然也不例外。PHPUnit和SpikePHPCoverage提供了后生可畏套基于xdebug的代码覆盖率测量试验方案。在本文中,小编将针对自个儿遭逢的一定业务场景,陈述一下融洽举行PHP代码函数覆盖率测量试验的设计方案。

版权注脚:本文为博主原创文章,未经博主允许不得转发。

在确立PHP开拓调节和测量试验情状时,常常会遭遇xdebug不恐怕成功安装的主题素材,其实主因有两点:

2. 作业背景

比方大家在线支付了一个网址,交给工作测量检验的同事去进行功效测验。这他们是怎么测验的呢?经常状态下,无非是开荒职员把网址布置好了,然后测量检验人士把英特网具有机能都试用三回,富含部分百般使用状态。对于事情测量检验来说,只要本人把持有的魔法点都测了,把装有非常使用状态也测到了,那就做到了。可是对于开拓来讲,笔者相比好奇的是,你是不是把自家写的全部代码都跑到了?会不会存在部分代码,独有在相当特殊的景观下能力接触,而你向来不曾测到过这个情况?当时,或然就需求代码覆盖率来出面了。

其实自身第风姿洒脱想到了xdebug来测验覆盖率,只须要两多个函数就能够,如下:

xdebug_start_code_coverage(); //开始收集代码行覆盖情况

xdebug_get_code_coverage(); //获取截至目前所跑过的代码文件名和行号

xdebug_stop_code_coverage(); //停止收集代码行覆盖情况

xdebug提供的接口能够用于测实践覆盖率,那是还是不是能满足须求呢?其实,行覆盖率颗粒度有一些细,实际项目中,开荒人士大概会对代码进行微调。举个例子,此番测量试验,你跑过了A.php文件的第10行,可是小编有一天对A.php进行了微调,在A.php第9行和第10行之间又加了两行代码。于是,原本的第10行变为了第12行,而xdebug的行覆盖消息只记录了行号……这样此前的数量岂不是不准确了么。。。思考每每,笔者觉着函数覆盖是个正确的颗粒度。在对峙成熟的项目中,比少之又少有科学普及函数变动的图景。可是难点是,xdebug并不曾提供函数覆盖的接口。

于是,大家后天逾越的现象是:

【1】希望测到某次测量检验中所覆盖的装有函数列表,知道那些体系共计有稍许个函数,总括一下覆盖率是或不是丰硕高。

【2】测验成功之后,要生成生机勃勃份覆盖率报告,将代码的覆盖情状可视化。

【3】完整测验的流水线如下:

图片 1

里头插桩的情趣是在测验推行以前的局地预备专业。

PHP调试追踪之XDebug使用总括:

  1. xdebug版本和php版本不相称

3. 函数覆盖率施工方案

(1)原理

xdebug天生提供了对行覆盖率的支撑,我们要本身总括出函数覆盖率。函数覆盖率须要两点数据,三个是怎么样函数被推行,一个是文件中总共有多少个函数。

文本中累加的函数量,由于大家不容许把装有函数都举办三回,因而那黄金年代部分只好通过代码静态扫描来落实。假若是在C++可能Java中,大概就必要词法解析工具了,但是在最美的语言PHP眼前,大家一起无需那么复杂。从PHP4.3从头,PHP
Zend
Engine中放置了tokenizer功效,扶助开采者做源码词法深入分析。大家只须要找到PHP中定义函数时所对应的词法则律,就足以轻巧到手钦赐PHP文件中的全部函数了。

tokenizer定义的接口也非常粗略:

array token_get_all (string $source)

该函数实行理文件件解析,将php源代码拆成由token组成的数组。

string token_name (int $token)

将整数格局的token调换为字符串方式。肖似于C语言中的strerror函数。有了tokenizer,自个儿再依赖php函数定义的准则和格式设计叁个轻便状态机,就能够完毕全量函数的分析。那有个别代码,本人写了个比较简陋的,把它独自拿出去,仅供大家参谋:PHPFunctionParser

求函数覆盖率的其余二个难题在于获取被推行的函数列表。这地方让我们走了生龙活虎部分弯路。意气风发初始一个最简便易行的法子,我们既然经过xdebug得到被执的行,能够由此行号来反推此行属于哪叁个函数。可是每一次的伏乞获取的行号音信量是那几个大的,假使二个求情试行了1000行,那将在开展1000次剖断,成效上会比较糟糕。应用商量了生龙活虎番后头,发掘xdebug提供了function
trace的效果与利益,能够把叁回呼吁中的函数调用关系获得到,只不过获得了函数名字,却无法拿到它所在的公文。于是,再一次调研大器晚成番,发掘了Reflection,给定方法名和类名,能够反推出来它在哪些文件中定义。于是大家利用function
trace把函数调用关系暂存在一个有时文件中,然后经过文件剖判,得到实践的函数名(假若是类方式,则是“类名::函数名”的款型),再通过reflection机制反推出概念那些函数的公文就可以。再度心获得了社会风气上最美语言的有力之处。

(2)插桩

为了减弱利用门槛,大家尽大概少地改成PHP源代码为好。xdebug搜集消息的规律是各自调用xdebug_start_code_coverage和xdebug_stop_code_coverage来决定覆盖率消息网罗的上马三保得了,由此不可制止地要改李松益代码。此处大家的清除办法是,将xdebug_stop_code_coverage通过register_shutdown_function注册为php程序截止前必须要跑的意气风发段程序(相仿C语言的atexit函数),将其包装到一个文书中,然后在源代码第后生可畏行require这么些文件就可以。即使你的PHP框架是CodeIgniter这种具备请求都有三个统意气风发入口index.php的框架,那就只要求转移那三个文本就能够,对源代码独有生龙活虎行的改过!实际上,近年来多数全数的PHP框架,都是以多少个index.php文件作为颇负央浼的入口。

作者们对源代码的校订只有进口文件index.php的首先行参加了一句话:

require_once "/file/path/to/phpcoverage.php"; ?>

而phpcoverage.php主题代码逻辑大致如下:

<?php
 ……
function xdebugPhpcoverageBeforeShutdown(){
 ……
 $lineCovData = xdebug_get_code_coverage();
 xdebug_stop_code_coverage();
 ……
 xdebug_stop_trace();
 ……
}
register_shutdown_function(‘xdebugPhpcoverageBeforeShutdown’);
……
xdebug_start_trace(……);
xdebug_start_code_coverage();
//备注:上面省略号表示非关键代码,这里就不展示了

(3)音讯存款和储蓄

我们的函数覆盖率测验有了思路,使用xdebug的function
trace获取二次呼吁中持有函数的调用关系,得到施行过的具有函数,输出到文件中,通过文件解析和reflection得到被实践的函数名和该函数所在文件。将那个新闻存入数据库或文件就能够。

后边试用Spike的时候,大家发掘那几个音信以xml格式存入文件,数据冗余度超级高,招致多少个测验下来,文件已经足够大了。这明明不是我们想见见的。由此在数量存款和储蓄的时候,大家一向将数据做json格式的连串化,字符串格局存在文件中,大大减弱了文件大小。与此同期,大家再经过要求来源的IP和日期作为分隔,分别存款和储蓄不一致的文件。那样,来自每一种机器每日的乞请数据都能看清,向着“精准”的倾向又迈进了一步,能够对测量试验职员的每一个央求做规范的监督。下图是大家在作业推行中收载的大器晚成都部队分数据文件截图:

图片 2

如此那般,来自别的二个IP的每二次Web央求,它所覆盖的行和函数消息,都会被记录到文件中。对于常常的类型测量检验中,也就唯有多少个测量检验职员在应用,所以无需酌量部分属性难点。

Xdebug是二个开源的PHP程序调节和测验工具,能够使用它来调治、追踪及解析程序运市价况。当然,Xdebug需求组合PHP的编制工具来打断点、跟踪、调节和测量检验及剖判,比较常用的PHP的Xdebug调节和测验景况:Vim
+Xdebug。

2.xdebug和 zend无法同有的时候间运维,需求在php.ini中禁掉zend配置

4. 告诉生成

上面讲了扭转覆盖率数据的规律,可是大家于今得到的只是后生可畏份份的数据文件,怎么样聚集成朝气蓬勃份完整的告诉呢?那就供给大家和好来写黄金时代段脚本深入分析刚才生成的数据文件了。大家的做法是借鉴了开源工具spike
phpcoverage的模板,并投入自个儿的代码逻辑,特别是步入了该工具所不具备的函数覆盖率总结数据。大家和睦测量检验的web页目生成的告知如下:

图片 3

图中能够观察种种文件的行覆盖率,函数覆盖率,还应该有总的覆盖率总结数据。若是需求更确切的数码,能够点进文件接二连三,查看究竟覆盖的是怎么着代码行(影青为掩没,肉色为未覆盖):

图片 4

·安装配置

 

5. 总结

作业测量试验中做Web测验时,对代码的覆盖率是衡量测量检查验质量量的珍视目的。我们期待通过此措施成功尽量地“精准”,测量检验推行完后得以标准见到哪生机勃勃行代码被实行过,哪生机勃勃行没被实行过。剖判没被执行过的自始至终的经过,进而改良测验用例。使用工具的流水线也十分不难,插桩=>测验=>搜聚数据=>出告诉。何况此施工方案最大化地降低了对作业代码的影响,只须求改生机勃勃行代码就能够。固然中间出现了问题,也足以火速将代码恢复生机为本来的指南。让测量检验放心,让开荒也放心。

唯独,最终还亟需重申的一点是,并非说覆盖了富有的代码,就印证测验已经完全了。只然而没被遮住的话,一定是破损的。所以那些方案最大的意思在于能够开采测试中有个别疏漏的代码,找到生机勃勃部分难题。其实,它也能够扶植新来的职工领会整个项目代码构造,大家得以清楚的精通,本人的每一回浏览器央求,到底在运维服务器上的怎么着代码。

·调节和测量检验境况

针对第叁个难题的施工方案,不过使用xdebug官方提供的U奇骏L来机关检查与你server
php境况相相称的xdebug版本。

·追踪分析

  1.  首先保证web server能够健康运营

  2.  在Browser中查看phpinfo,URL:

  3.  在Browser中右键,查看源代码,拷贝phpinfo的源代码

  4.  打开

  5. 将phpinfo源代码全体copy到地点的页面里的输入框中

  6. 终极点击页面最下方的”Analyse my phpinfo(卡塔尔 output” 按键

  7. 末尾将会看出大家的系统境况中供给设置哪个版本的php xdebug dll的本子

·注意事项

php.ini文件中有关xdebug的配备如下:

·蒙受标题

 

黄金时代、安装配置

  1. [Xdebug]  
  2. zend_extension=”xbug dll路径”  
  3. xdebug.auto_trace = On    
  4. xdebug.show_exception_trace = On    
  5. xdebug.remote_autostart = On      
  6. xdebug.remote_enable = On    
  7. xdebug.remote_host = 127.0.0.1    
  8. xdebug.remote_port = 9000    
  9. xdebug.remote_handler = dbgp      
  10. xdebug.profiler_enable = on    
  11. xdebug.profiler_output_dir=”日志路线”   

1、安装

全体配置及解析:

Xdebug的安装是当作PHP的进行而存在的,所以可参照PHP拓宽文章:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
xdebug.auto_trace=1
xdebug.default_enable = 1
 
;最大递归数
xdebug.max_nesting_level=100
;重写var_dump()
xdebug.overload_var_dump = On
;当这个参数被设置为1时,即使捕捉到异常,xdebug仍将强制执行异常跟踪当一个异常出现时
xdebug.show_exception_trace=1
xdebug.show_local_vars = 1
 
xdebug.collect_params=On
xdebug.collect_return=On
xdebug.collect_vars=On
 
xdebug.profiler_enable_trigger=On
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
 
xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
;xdebug.dump.SERVER = *
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT

享有配置文件
xdebug.auto_trace
类型: boolean(布尔型), 默认值: 0
当展开那项布署时,在剧本运行以前,对函数调用的寻踪就能够启用.那使得开垦者能够在auto_prepend_file文件中追踪脚本.

2、配置


php.ini:

xdebug.cli_color
类型: integer(整型), 默认值: 0, 在Xdebug 2.2
只要这项被安装为1,
当使用CLI格局同期输出端是打字机时,Xdebug将会为变量消息和旅舍轨迹输出增加颜色.
在Windows系统下, ANSICON工具供给被安装.
假定那项棉被服装置为2, Xdebug将一向为变量消息和储藏室轨迹输出增多颜色,
不管它是或不是连接到风华正茂台打字机也不管ANSICON是还是不是被安装. 在此种情状下,
你或然会终止转义代码.
查阅那篇作品以博取越来越多细节.

[xdebug]


;基本调节和测验配置

xdebug.collect_assignments
类型: boolean(布尔型), 默认值: 0, 在Xdebug 2.1
此项,暗许为0, 调节Xdebug是还是不是合宜对函数轨迹增添变量分配追踪.

xdebug.auto_trace = on


xdebug.collect_params = on

xdebug.collect_includes
类型: boolean(布尔型), 默认值: 1
此项,默认为1, 调整Xdebug是不是合宜将要include(卡塔尔国, include_once(),
require()或require_once(卡塔尔函数中应用的文本名写入追踪文件。

xdebug.collect_return = on


xdebug.profiler_enable = on

xdebug.collect_params
类型: integer(整型), 默认值: 0
此参数,默以为0,当在函数轨迹或旅舍轨迹中记录八个函数调用时,调控Xdebug是或不是相应访问传递给函数的参数
默许值为0,因为对于大脚本来讲,它大概损耗多量的内部存储器而使脚本不也许运维。启用该选项是安全的,不过若是脚本中带有多量函数调用或然有大数据布局作
为参数的话,大概会逾越一些主题材料。 Xdebug
2改良了内部存款和储蓄器使用,此问题不再存在,因为它不再将那几个消息存款和储蓄在内部存款和储蓄器中。相反,Xdebug会将这个信息写入硬盘,那代表你得小心硬盘使用量。
此参数用4个不等的可选值,每种分裂的值都会相应展现不相同的音讯。以下你将见到种种参数值所提供呈现的音信,查看章节货仓轨迹以得到详细介绍。.

xdebug.profiler_output_dir =”/php/ext/xdebug_profilers”

显示的信息
0
1 变(常)量类型和长度(大小)(如string(6), array(8))。
2 变(常)量类型和长度(大小), 含有用以显示完整信息的帮助工具1
3 完整变量内容(包括通过xdebug.var_display_max_children, xdebug.var_display_max_data和xdebug.var_display_max_depth参数设置的限制信息。
4 完整变量内容和名称。

xdebug.trace_output_dir = “/tmp/ext/xdebug_traces”

1 在蕴藏CLI的PHP版本中,将不会有所援助理工科程师具,在出口文件中相像也未曾。

;远程调节和测量检验设置


xdebug.remote_enable = on

xdebug.collect_return
类型:boolean(布尔型), 默认值:0
此设置,暗许值为0,调节Xdebug是不是应当将函数调用的再次回到值写入轨迹文件。

xdebug.remote_host = localhost


xdebug.remote_port = 9010

xdebug.collect_vars
类型: boolean(布尔型), 默认值: 0
以此装置告诉Xdebug来采摘在任天由命范围内采纳的变量的音信。那风华正茂进程非常的慢,因为Xdebug必得对PHP的opcode数组进行反向工程。那几个装置不会记录区别变量的变量值,假设急需记录变量值,能够选拔xdebug.collect_params。唯有当您愿意选拔xdebug_get_declared_vars()参数时,xdebug.collect_params才必要被启用。

xdebug.remote_autostart = on


zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so

xdebug.coverage_enable
类别:boolean(布尔型), 暗中认可值: 1, 在Xdebug 2.2 版中援用
倘使此项设置为0,Xdebug将不会成立内部布局来扶持代码功效域。那将使Xdebug的运作速度有一点点加速,当然
代码效率域分析也将不起效用。

NOTE:


地点罗列的是并世无两常用的安插选项,至于别的布署选项及相应的意思,请参照他事他说加以考查:

xdebug.default_enable
类型: boolean(布尔型), 默认值: 1
尽管那项被设置为1, 在产生错误事件时,将私下认可展现旅馆轨迹.
你可以因此在代码中运用xdebug_disable(卡塔尔国来剥夺展现仓库轨迹.
由于那是Xdebug的着力函数之意气风发,所以最佳利用其暗许值。


二、调节和测量检验蒙受

xdebug.dump.*
类型: string(字符串), 默认值: Empty

Vim + Xdebug:

* = 董事长KIE, FILES, GET, POST, REQUEST, SELX570VE福睿斯,
SESSION。那7个参数调控当错误意况时有产生时,彰显怎么超全局变量。在php.ini设置中,要显得的超全局变量之间用逗号隔绝,不过要保证未有增加空格。若是要在错误产生时显示REMOTE_ADDR和REQUEST_METHOD,增添如下设置:

1、下载

xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD

 

2、配置


$ cd ~

xdebug.dump_globals
类型: boolean(布尔型), 默认值: 1
决定是还是不是出示由xdebug.dump.* 参数钦命的超全局变量的值。

$ sudo mkdir ~/.vim


将地点下载的xdebug的plugin汉语件复制到.vim下:

xdebug.dump_once
类型: boolean(布尔型), 默认值: 1
调整是对富有的乖谬情形(设置为0)都显示超全局变量的值依旧只对第三个产生的荒诞情状(设置为1)彰显超全局变量的值。

$ sudo cp –r /php/ext/plugin .


在顾客主目录下创立.vimrc文件:

xdebug.dump_undefined
类型: boolean(布尔型), 默认值: 0
假设您想呈现超全局变量中未定义的值,你应有将此项设置为1,不然使用私下认可值。

$ sudo touch /usr/share/vim/vimrc ~/.vimrc


$ sudo vim ~/.vimrc

xdebug.extended_info
类型:integer(整型), 默认值: 1
支配Xdebug是或不是应该为PHP语法解析威吓行使’extended_info’情势;
那将允许Xdebug使用远程调节和测量检验器设置文件/行断点.当对台本举办追踪也许功效分析时,你平日会想要关闭该接受,因为PHP生成的op数组将
不断增大,而它看做你脚本的第三方将降低脚本的实践成效。此设置项不可能因此ini_set(卡塔尔国函数进行设置,
而只好通过php.ini.

为.vimrc增添以下内容:


let g:debuggerPort = 9010(该端口必得与xdebug.remote_port相同)

xdebug.file_link_format
品类: string(字符串), 暗中同意值: , 在Xdebug 2.1 版中推荐

let g:debuggerMaxDepth = 5(代表数组调节和测量试验深度配置)

此设置调整在仓房轨迹呈现中的超链接格式,酒店轨迹中央银行使了文件名称。它将同意IDE来创立三个链接合同,通过点击Xdebug展现在仓房轨迹中的文件名能够一向跳转到内定的行和文件。
链接格式或然是这种样式:

NOTE:

myide://%f@%l

vimrc文件是vim的最首要配备文件,它满含多少个本子:全局版本和客商版本,我们提出订正客商版本的vimrc配置文件,那三种版本的路线可在vim普通情势下查看,如下:

可用的格式操作符有:

全局版本路线查看:

操作符 意义
%f 文件名
%l 行号

$ sudo vim

若是要在linux下采纳火狐浏览器,请根据以下步骤:

$ :echo $VIM

  • 打开about:config
  • 加上八个boolean(布尔型)设置”network.protocol-handler.expose.xdebug”
  • 将上面包车型地铁代码写入二个shell脚本”~/bin/ff-xdebug.sh”:

    #! /bin/sh
    
    f=`echo $1 | cut -d @ -f 1 | sed 's/xdebug:////'`
    l=`echo $1 | cut -d @ -f 2`
    

    再增添以下的中间风姿洒脱行(取决与你用komodo依然gvim卡塔尔:

    • komodo $f -l $l
    • gvim --remote-tab +$l $f
  • 使用chmod +x ~/bin/ff-xdebug.sh指令让脚本可推行

  • 将xdebug.file_link_format设置为xdebug://%f@%l

路线地址:/usr/share/vim

Windows and netbeans

  • 创设三个名称叫netbeans.bat的公文同有时间将其保存到你的路子中(如:C:Windows):

    @echo off 
    setlocal enableextensions enabledelayedexpansion 
    set NETBEANS=%1
    set FILE=%~2
    %NETBEANS% --nosplash --console suppress --open "%FILE:~19%"
    nircmd win activate process netbeans.exe
    

    **注意: 借使您未有nircmd,移除最终风流浪漫行.**

  • 将眨眼间间的代码保存为netbeans_protocol.reg文件:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOTnetbeans]
    "URL Protocol"=""
    @="URL:Netbeans Protocol"
    
    [HKEY_CLASSES_ROOTnetbeansDefaultIcon]
    @=""C:\Program Files\NetBeans 7.1.1\bin\netbeans.exe,1""
    
    [HKEY_CLASSES_ROOTnetbeansshell]
    
    [HKEY_CLASSES_ROOTnetbeansshellopen]
    
    [HKEY_CLASSES_ROOTnetbeansshellopencommand]
    @=""C:\Windows\netbeans.bat" "C:\Program Files\NetBeans 7.1.1\bin\netbeans.exe" "%1""
    

    **注意: 确定保障您将路线订正到Netbeans的设置目录 (若干回卡塔尔,同期也要
    修正netbeans.bat补丁文件的门路,假如您将其保存在C:Windows之外的目录.**

  • 双击netbeans_protocol.reg文本来将其导入注册表.

  • 将xdebug.file_link_format的值设置为xdebug.file_link_format = "netbeans://open/?f=%f:%l"

 


xdebug.idekey
类型:string(字符串), 默认值: *complex*
支配Xdebug应该将哪个IDE键传递给DBGp调节和测量检验器帮手. 暗许值是依附情况变量的.
首先会询问碰到变量的DBGP_IDEKEY设置,
然后是USECR-V,最后是USESportageNAME.默许棉被服装置为第二个被找到的 情况变量的值.
若无查询到别的值,私下认可值为”.假设此项被安装,它平时会覆盖境况变量的值.


xdebug.manual_url
类型: string(字符串), 默认值:
xdebug音讯中关于函数和错误音讯的超链接将直接链接到PHP帮忙手册中的函数页面。最佳将此项设置为近些日子的镜像。


xdebug.max_nesting_level
类型: integer(整型), 默认值: 100
用来调控对极端递归的保卫安全机制。
此项的值约束了在剧本中断此前,运营嵌套试行的函数的最大数据(即最大递归次数,抢先这一个数,php脚本将中止推行)。


xdebug.overload_var_dump
品种: boolean(布尔型), 暗中认可值: 1, 在Xdebug 2.1 版中引入
暗许情状下,当php.ini的html_errors设置为1时,Xdebug将运用重载的var_dump(卡塔尔(قطر‎函数来彰显变量消息。借使您不想那样,那么你能够把此项设置为0,不过以前你有重中之重先反省,确认保障未有关闭html_errors。


xdebug.profiler_append
类型:integer(整型), 默认值: 0
当此选项设置为1,
在三个新的伸手被映射到均等的公文(信任于xdebug.profiler_output_name的安装State of Qatar时,功效解析文件的内容不会被掩瞒。新的故事情节将会被追加到原著件的最后。


xdebug.profiler_enable
类型:integer(整型), 默认值: 0
启用Xdebug的功能剖判器,功能文件被创立在 profile output directory目录.
那几个文件能够被
KCacheGrind读取以表今后您眼下。此命令无法在本子中通过ini_set(卡塔尔(قطر‎来设置,假若您想有选用的启用效用深入分析,
请设置xdebug.profiler_enable_trigger为1,
不要利用此命令。


xdebug.profiler_enable_trigger
类型:integer(整型), 默认值: 0
当此选项设置为1,通过行使XDEBUG_PROFILE作为GET/POST参数,或者以XDEBUG_PROFILE作为名称来设置三个cookie,你能够触发生成效能深入分析文件。
那样,效用数据将会被写入defined directory目录.
假诺不想为每三个号召都生效率果解析文件,你须要将
xdebug.profiler_enable设置为0.


xdebug.profiler_output_dir
类型:string(字符串), 默认值: /tmp
意义解析器的出口新闻将被写入的目录,确认保障实践PHP脚本的客户全体对目录的写权限。那条指令不可能通过
ini_set(State of Qatar函数设置。


xdebug.profiler_output_name
类型:string(字符串), 默认值: cachegrind.out.%p
这项设置决定被用来转存作用消息文件的名目。它经过格式操作符来鉴小名称格式,跟
sprintf(卡塔尔国和strftime(State of Qatar函数相通。有多少格式操作符能够被用来格式化文件名称。
查看xdebug.trace_output_name的介绍来详细精通格式操作符。


xdebug.remote_autostart
类型:boolean(布尔型), 默认值: 0
普通,你必要利用贰个钦定的HTTP GET/POST变量来运营远程调试(s查看远程调节和测验卡塔尔国.
当此项被安装为1时,Xdebug将会尝试运转远程调节和测量试验会话并且三回九转贰个顾客端 ,
尽管GET/POST/总COOKIE变量官样文章.


xdebug.remote_connect_back
品种:boolean(布尔型), 默许值: 0, 在Xdebug 2.1 版中援用
假诺启用该配置, xdebug.remote_host设置将被忽视,
Xdebug将尝试连接至发起HTTP供给的客户端
.它会检查$_SERVER[‘REMOTE_ADDR’]变量来寻找该应用哪个IP地址.
请当心无法利用
no值来过滤 ,
任何能够接连到web服务器的人都足以运行调试会话,尽管他们之处跟
xdebug.remote_host的安装不相配.


xdebug.remote_cookie_expire_time
项目:integer(整型), 暗中认可值: 3600, 在Xdebug 2.1 版中推荐
该装置能够用来充实(或调整和降低卡塔尔国远程调节和测验会话的水土保持时间。


xdebug.remote_enable
类型:boolean(布尔型), 默认值: 0
该装置调控Xdebug是还是不是相应尝试连接一个调养客商端,该调节和测量检验客商端监听的主机和端口通过
xdebug.remote_host和 xdebug.remote_port配置项来设置.
假诺无法树立到调节和测量试验顾客端的接连,脚本将继续实施,犹如该装置被装置为0同样.


xdebug.remote_handler
类型:string(字符串), 默认值: dbgp
能够是’php3’,它将采取较老的PHP 3 风格调节和测验器
输出;’gdb’,启用肖似于GDB的调节和测量检验器接口只怕’dbgp’ – 调节和测验器协议.
DBGp公约被各样顾客端布满援救 查看远程调节和测量检验以博得越多细节.
注意: Xdebug 2.1和之后的本子只匡助’dbgp’左券.


xdebug.remote_host
类型:string(字符串), 默认值: localhost
慎选运营调治客商端的主机, 你能够使用叁个主机名或许一个IP地址.
假设xdebug.remote_connect_back被启用,此设置将被忽视.


xdebug.remote_log
类型:string(字符串), 默认值:
要是该项被设置为四个值,
它将被当做二个文件名,全体的长途调节和测量试验通讯消息将被记录在该文件中.
文件通过以追加形式展开因而先前的记录不会被覆盖. 未有提供并发敬服机制.
文件的格式形如:

Log opened at 2007-05-27 14:28:15
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/x ... ight></init>

<- step_into -i 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/db ... ></response>

xdebug.remote_mode
类型:string(字符串), 默认值: req
当调节和测量试验连接被先导化时采用调节和测量检验格局.该装置有2个差异的值:

req
如若脚本开端实施,Xdebug就将尝试连选择调节和测量检验顾客端。

jit
除非当错误爆发时,Xdebug才会尝试连选取调节和测量检验顾客端。

 


xdebug.remote_port
类型:integer(整型), 默认值: 9000
Xdebug尝试连接的长途主机的端口.
默许意况下,第三方调度顾客端和绑定的调护医治顾客端
的端口都以9000.出于有无数顾客端都使用这几个端口号,最佳不用改换私下认可值.


xdebug.scream
花色: boolean(布尔型), 暗中认可值: 0, 在Xdebug 2.1版中援用
假设此项设置为1,Xdebug将禁止使用@操作符,那么php的乖谬提醒音信将不可能被隐形。


xdebug.show_exception_trace
类型: integer(整型), 默认值: 0
当此项设置为1时,
不关哪一天发出极其,Xdebug都将显得一个库房轨迹-就算已经捕捉到了要命。


xdebug.show_local_vars
类型: integer(整型), 默认值: 0
当此项设置为不等于0的值时,Xdebug在错误爆发时生成的库房音信照旧就要最顶层展现全体变量的音信。注意,使用这么些选项可能会转换比比较多音信,所以此参数默许是关闭的。


xdebug.show_mem_delta
类型: integer(整型), 默认值: 0
当此项设置为不等于0的值时,Xdebug生成的人类可读的轨迹文件将会显得函数调用间不一致的内部存款和储蓄器使用状态。倘使Xdebug被安装为转移机器可读的轨迹文件,那么将一贯展现此新闻。


xdebug.trace_enable_trigger
类型: boolean(布尔型), 默认值: 0, 在Xdebug 2.2
当此参数设置为1时, 你能够运用XDEBUG_TRACE
GET/POST参数或许应用XDEBUG_TRACE参数设置叁个cookie来触发轨迹文件的变迁。
那会将轨道数据写入轨迹文件目录。
假若要阻止Xdebug生成轨迹文件,你需求设置 xdebug.auto_trace参数为0。


xdebug.trace_format
类型:integer(整型), 默认值:0

轨道文件的格式。

描述
0 显示人类可读的轨迹文件内容: 时间索引内存使用内存增量 (如果xdebug.show_mem_delta参数被启用), 层级函数名函数参数 (如果xdebug.collect_params被启用), 文件名 和 行号.
1 写入含有两种不同记录的计算机可读的格式。 有很多不同的记录可以用来进入或离开一个堆栈结构。下面的表格列出了每种类型的记录的相关栏目,栏目之间通过制表位隔开。
2 写入HTML格式的轨迹。

微电脑可读格式的记录栏目:

笔录类型

1

2

3

4

5

6

7

8

9

10

入口

level

function #

always ‘0’

time index

memory usage

function name

user-defined (1) or internal function (0)

name of the include/require file

filename

line number

出口

level

function #

always ‘1’

time index

memory usage

empty

查看函数轨迹章节的例证。

 


xdebug.trace_options
类型:integer(整型), 默认值:0
当设置为1时,后来的伸手所发生的轨迹音讯将会被增大至早前轨迹音讯之后,而不会覆盖原音讯。


xdebug.trace_output_dir
类型:string, 默认值:/tmp
轨道输出文件所在目录,确定保障当前实施PHP脚本的客户具备对该目录的写入职务。


xdebug.trace_output_name
类型:string, 默认值:trace.%c
轨道文件的文件名。此设置使用一定的格式来命名轨迹文件,和sprintf(State of Qatar与strftime(卡塔尔(قطر‎十分像样。有几多格式能够用来命名轨迹文件,’.xt’后缀日常会活动抬高。
可用的格式操作符有:

操作符 意义 示例格式 示例文件名
%c crc32 of the current working directory trace.%c trace.1258863198.xt
%p pid trace.%p trace.5174.xt
%r random number trace.%r trace.072db0.xt
%s script name 2 cachegrind.out.%s cachegrind.out._home_httpd_html_test_xdebug_test_php
%t timestamp (seconds) trace.%t trace.1179434742.xt
%u timestamp (microseconds) trace.%u trace.1179434749_642382.xt
%H $_SERVER[‘HTTP_HOST’] trace.%H trace.kossu.xt
%R $_SERVER[‘REQUEST_URI’] trace.%R trace._test_xdebug_test_php_var=1_var2=2.xt
%U $_SERVER[‘UNIQUE_ID’] 3 trace.%U trace.TRX4n38AAAEAAB9gBFkAAAAB.xt
%S session_id (from $_COOKIE if set) trace.%S trace.c70c1ec2375af58f74b390bbdd2a679d.xt
%% literal % trace.%% trace.%%.xt

2 此操作符对轨道文件名无效。
3 2.2版中援用,此操作符通过Apache的mod_unique_id
module来设置。

 


xdebug.var_display_max_children
类型: integer(整型), 默认值: 128
此参数用于当使用xdebug_var_dump(),
xdebug.show_local_vars或函数轨迹来展现变量时,调控数组子节点和目标属性的显得数量。
若是要注销约束,使用-1作为参数值。
此参数对通过原程调节和测验成效发送给客商端的子节点的多少并未有其余影响。


xdebug.var_display_max_data
类型:integer(整型), 默认值:512

此参数用于当使用xdebug_var_dump(),
xdebug.show_local_vars或函数轨迹来体现变量时,调整被突显的字符串的最大尺寸。
假定要撤回约束,使用-1用作参数值。
此参数对通过原程调节和测量试验功能发送给客商端的多寡的多寡未有任何影响。

 


xdebug.var_display_max_depth
类型: integer(整型), 默认值: 3
此参数用于当使用xdebug_var_dump(),
xdebug.show_local_vars或函数轨迹来呈现变量时,调节数组成分和指标属性的最大嵌套层数。
你能选拔的最大值是1023,你也能够设置参数值为-1,那样Xdebug将会自动选用1023。
此参数对通过中远间距调节和测量检验效率发送给顾客端的子节点的深浅(译者注:深度是数据布局上的概念)未有其余影响。

客商版本路线查看:

$ sudo vim

$ :echo $HOME

门路地址:$HOME

注意:

g:debuggerPort的端口号,必得与xdebug.remote_port相同;

g:debuggerMaxDepth代表的是本子调节和测验的最大深度档案的次序;

最终,更正完php.ini、.vimrc配置后,记得重启php-fpm。

3、调试

A、计划五个php文件

<?php

$value = ‘立刻使用XDebug调节和测量试验程序,你准备好了吗’;

echo$value;

?>

将上边的文本放入到你的Web根目录下,作者的拜访地址是:

B、使用vim打开php文件

利用vim普通情势张开php文件,移动鼠标箭头到欲调节和测量试验的这行,输入:

$:Bp

截图如下:

图片 5

下一场,按下F5(Mac:Fn+F5卡塔尔(قطر‎,早先监听调节和测量试验事件,那个时候在编写制定窗尾部提醒5秒内访问要调解的php文件,譬喻:

XDEBUG_SESSION_START=1

截图如下:

图片 6

对于调节和测量检验中的操作在底下附加上:

类型

功能

说明

<Command Mode>

:Bp

toggle breakpoint

断点标记

:Up

stack up

:DN

stack down

<Normal Mode>

,e

eval

<Function Keys>

F1

resize

调整窗口大小

F2

step into

调试步进入

F3

step over

调试步进入下一标记

F4

step out

调试步出当前标记

F5

run

调试运行

F6

quit debugging

退出调试模式

F11

get all context

获得所有变量内容

F12

get property of cursor

获得当前光标变量

三、追踪解析

1、代码覆盖解析

Xdebug
2.2开端支持对代码覆盖的解析,也正是透过对代码的覆盖解析,大家得以驾驭到在IDE访谈时期,有如何代码行数被实施了,有协理对大旨代码和单元测量试验有指向的询问和解析,最终升高代码的身分。

A、涉及的配置

xdebug.coverage_enable=1

//该配置默认为1,也便是暗中同意开启,假如设置为0,代码的覆盖分析就不会开展。

B、涉及的函数

booleanxdebug_code_coverage_started()

//该函数再次回到布尔值,用来判别代码覆盖深入分析效率是或不是开启,未打开则赶回false。

voidxdebug_start_code_coverage([int options])

//该函数未有此外重回,它的功能是发端征集解析结果集数据,数据是以二维数组时势//存在,风流倜傥维参数为深入分析的文书名字,二维参数为对应的解析行数;其它,在解析文件

//的每行代码时,都会发生一个结实码,如下:

//1:代表代码已经实践;

//-1:代表代码未被实施,对应函数参数XDEBUG_CC_UNUSED传入;

//-2:代表未有可执行的代码存在,对应XDEBUG_CC_DEAD_CODE和XDEBUG_CC_UNUSED

NOTE:

XDEBUG_CC_UNUSED:用来计量解析时满含搜聚未被执行的代码;

XDEBUG_CC_DEAD_CODE:用来估测计算深入分析时期码行是还是不是被实践;

款式如下:

xdebug_start_code_coverage(XDEBUG_CC_UNUSED|XDEBUG_CC_DEAD_CODE);

arrayxdebug_get_code_coverage()

//该函数重回数组值,用来访问和重临代码覆盖深入分析的结果集音信。

voidxdebug_stop_code_coverage([int cleanup=true])

//该函数不回去任何值,用来终止覆盖剖析,借使传入参数为true,那么就能告后生可畏段落解析并清空内部存储器中的深入分析结果集,否者传入false,反之,还可应用//xdebug_start_code_coverage找回该内部存款和储蓄器音信。

C、示例的求证

Php代码:

<?php

echo ‘覆盖分析进行中…</br>’;

// 创设封装对象

class XdebugCoverageAnalysisModel {

private $_coverage_info;

private $_status;

function __construct() {

$this->_coverage_info = xdebug_get_code_coverage();

$this->_status =xdebug_code_coverage_started();

}

// 获取深入分析结果

public functiongetCodeCoverageResult() {

returnjson_encode(xdebug_get_code_coverage;

}

// 开启覆盖深入分析

public functionxdebugStartCodeCoverage() {

xdebug_start_code_coverage( -1 | -2 );

}

// 剖析是还是不是实践

public functionxdebugCodeStarted() {

return xdebug_code_coverage_started();

}

}

// 初始化

$apiModel = new XdebugCoverageAnalysisModel();

echo ‘开启覆盖深入分析…</br>’;

$apiModel->xdebugStartCodeCoverage();

// 定义一个测量试验函数

function coverageSample {

echo ‘函数结果:’..'</br>’;

}

echo ‘判定是不是开启…</br>’;

$status = $apiModel->xdebugCodeStarted();

if($status==’1′) {

echo ‘开启覆盖剖析已到位</br>’;

} else {

echo ‘开启覆盖深入分析退步了</br>’;

}

echo ‘测验函数开启…</br>’;

coverageSample;

echo ‘获取解析结果…</br>’;

$result = $apiModel->getCodeCoverageResult();

echo $result.'</br>’;

echo ‘关闭分析按键…</br>’;

xdebug_stop_code_coverage();

$status = $apiModel->xdebugCodeStarted();

if($status==’1′) {

echo ‘覆盖解析已经做到</br>’;

} else {

echo ‘覆盖解析已经关门!</br>’;

}

unset;

unset($apiModel);

?>

浏览器结果:

图片 7

2、PHP脚本分析

Xdebug的PHP脚本剖析作用相比较实用,它能够援助我们深入深入分析代码的瓶颈和影响属性缓慢的标题,为优化代码提供方向的参谋。

A、涉及的布局

xdebug.profiler_enable

//该配置默感觉0,为张开,设置为非0之后,即张开profiler作用

xdebug.profiler_output_dir

//该配置为地方开启之后,寄放生成剖析文件的岗位,须求确定保障地方可写入,默许/tmp

xdebug.profiler_enable_trigger

//纵然展开该选用,则在历次恳求中假设GET/POST或cookie中包括//XDEBUG_PROFILE变量名,则才会转移质量报告文本(前提是必需关闭

//xdebug.profiler_enable选项,不然该选项不起成效卡塔尔(قطر‎。

xdebug.profiler_output_name

//能够行使该配置修改生成的分析文件,私下认可cachegrind.out.%p

NOTE:

提出接受xdebug.profiler_enable_trigger替代xdebug.profiler_enable

B、涉及的函数

stringxdebug_get_profiler_filename()

//重返类型为字符串,用来回到解析的文书名字

C、示例的认证

当我们展开分析开关之后,当有脚本运转就能在钦点的职责生成格式为cachegrind.out.xxx的深入分析文件:

图片 8

该公文的剧情不是很直观,所以须求接收可视化的工具来查看和深入分析,而Xdebug本人就支持使用第三方的可视化profiler文件的剧情。在Linux下,能够行使KCacheGrind,而在Windows平台,能够动用QCacheGrind,当然还或者有局地在线的由爱好者开拓的工具,举例:WebGrind,具体什么使用那几个工具,可以参照他事他说加以考察:

上边罗列下,WebGrind的意义:

图片 9

WebGrind能够在此下载:

四、注意事项

1、防止生育情况开启profiler和trace,只需开启远程调试;

2、尽量选取xdebug.profiler_enable_trigger替代xdebug.profiler_enable;

3、假若利用webgrind深入分析profiler,提议不要放入临蓐条件,因为其尚无平安节制,任哪个人都得以访谈;

4、Xdebug的机能即便强盛,可是要平衡品质花费;

五、境遇难点

问题:Error(“DbgProtocol instance has no attribute ‘stop'”,)

发生该难点的原由大致如下:

A、配置文件配置不得法;

B、.vimrc和php.ini中的port不相同;

C、.vimrc和php.ini中的port与现成的port冲突;

解决:

相比较下面的几条明细查看配置就能够。

NOTE:

有博客说因为未在UEscortL后加多XDEBUG_SESSION_START=1,并不是那样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注