使用XDebug調(diào)試及單元測(cè)試覆蓋率分析
<!--[if !supportLists]-->一、<!--[endif]-->安裝篇(XDebug 和PHPUnit)
A:安裝XDebug:
Xdebug網(wǎng)下載xdebug dll文件,存放到php加載的ext目錄下(可以選擇重命名,比如php_xdebug.dll,然后打開(kāi)php.ini文件,添加配置
[xdebug]
zend_extension_ts = php_xdebug.dll
xdebug.profiler_enable = on
xdebug.trace_output_dir = D:\PHPAPP\XDebug
xdebug.profiler_output_dir=D:\PHPAPP\XDebug
xdebug需要采用zend引擎加載的方式加載,所以用zend_extension_ts或是zend_extension, ts是thread_safety, 目前5.3以上才支持zend_extension加載,<5.3的用zend_extension_ts加載(或者你可以查看phpinfo是否啟用了zts),然后重啟apache,查看phpinfo,就發(fā)現(xiàn)XDebug選項(xiàng)了。
可以看到xdebug.profiler_enable,xdebug.profiler_output_dir,xdebug.trace_output_dir這三個(gè)是我們剛剛配置的項(xiàng),可以安裝自己的需要配置剩余項(xiàng),xdebug.profiler_enable:開(kāi)啟性能分析,
開(kāi)啟這個(gè)之后會(huì)在xdebug.profiler_output_dir這個(gè)目錄下生成cachegrind.out.XXX的分析文件,如果指定了xdebug.profiler_output_name這個(gè),則輸出來(lái)的文件就會(huì)是指定的名字.xxx的格式(此方法不適合分析,原因稍后說(shuō)明),
xdebug.trace_options:這個(gè)是開(kāi)啟跟蹤項(xiàng),
開(kāi)啟該項(xiàng)之后,會(huì)在xdebug.trace_output_dir下生產(chǎn)跟蹤文件,注意該項(xiàng)會(huì)影響運(yùn)行速度,因?yàn)樗枰涗浉欉^(guò)程中的一系列事件。
關(guān)于XDebug還有一點(diǎn)需要注意的:XDebug是調(diào)試的,也就是說(shuō)配置了XDebug那程序運(yùn)行的就是一個(gè)Debug狀態(tài),所以這時(shí)候zend_optimizer就不能用了,總不能讓程序即調(diào)試狀態(tài)又處于優(yōu)化狀態(tài)哈。
更多關(guān)于XDebug的,大家去網(wǎng)上發(fā)掘吧~~然后一起探討哈
友情提醒:對(duì)于使用集成環(huán)境的同學(xué),比如Wamp,它擁有兩個(gè)PHP.ini配置文件,一個(gè)在Apache下,一個(gè)在PHP下,Apache下是影響web的,而PHP下是影響命令行的,所以····(感謝俊哥的提醒)
B:安裝PHPUnit:
關(guān)于PHPUnit的安裝過(guò)程,網(wǎng)上也已經(jīng)很多了,之前自己為了終于安裝成功之后也小寫了篇安裝篇(http://user.qzone.qq.com/414073277/blog/1292122868),所以這里就不再贅述了,網(wǎng)上的一些安裝教程大都能完成安裝。就簡(jiǎn)單說(shuō)下過(guò)程:
PHPUnit安裝用的是pear的安裝方式,所以如果機(jī)子沒(méi)有安裝過(guò)pear包需要先安裝下,一般在php安裝的時(shí)候在其安裝目錄下都有一個(gè)go-pear.bat文件,直接執(zhí)行即可完成安裝,【這里安裝需要注意擴(kuò)展exif,這個(gè)擴(kuò)展會(huì)用到mbstring擴(kuò)展中的方法,所以mbstring的加載順序需要再exif之上?!客瓿?/SPAN>pear的安裝之后就可以執(zhí)行pear,查看pear的命令參數(shù),
然后依次執(zhí)行:
pear channel-discover pear.phpunit.de
pear install –alldeps phpunit/PHPUnit
需要注意的是現(xiàn)在最新版的phpunit是3.5的··但是這個(gè)只有pear的版本是1.6以上及PHP5.2.X才會(huì)安裝得到最新版·否則是安裝的是第一次的版本(不過(guò)不影響使用)。
安裝好后就可以執(zhí)行phpunit查看相關(guān)信息:
可以看到有—coverage-html –coverage-clover –coverage-source這三個(gè)選項(xiàng)·就是因?yàn)樵?/SPAN>XDebug安裝成功之后才能用,這三個(gè)對(duì)于導(dǎo)出覆蓋率文件可是很重要的選項(xiàng)。
<!--[if !supportLists]-->二、<!--[endif]-->PHPUnit 單元測(cè)試覆蓋率分析
單元測(cè)試,最重要的指標(biāo)之一就是覆蓋率。這點(diǎn)雖然Zend Studio上可以很清晰的看出來(lái),可是要導(dǎo)出成一分文檔就不太好使了,所以這時(shí)候XDebug就又可以幫上忙了,使用的時(shí)候也挺簡(jiǎn)單,調(diào)用命令即可:
phpunit –coverage-html D:\PHPAPP\XDebug\ YouTest
這樣就會(huì)將生成的覆蓋文件(html格式的)放在D:\PHPAPP\XDebug\目錄下了,
然后就可以在放置的目錄下找到一堆的html文件,運(yùn)行下index.html
就可以看到這樣的圖了,英文字母很簡(jiǎn)單··意思也明了就不解釋了,說(shuō)明一點(diǎn):
測(cè)試結(jié)果說(shuō)明:一共有5種,上圖的例子出現(xiàn)了兩種。
. :代表正確
F :代表斷言錯(cuò)誤
E :代表PHP程序錯(cuò)誤或是異常
I : 代表沒(méi)有實(shí)現(xiàn)的方法
S : 代表是跳過(guò)的方法
生產(chǎn)的覆蓋文件說(shuō)明:
Classes: 只有一個(gè)類中的所有方法都被覆蓋的時(shí)候,這個(gè)類才算是被測(cè)試完的
Functions/Methods :只有一個(gè)方法或是函數(shù)的所有有效的語(yǔ)句代碼都被執(zhí)行到了才算這個(gè)方法或是函數(shù)是被測(cè)試完的
Lines: 總行數(shù)將會(huì)不飽行注釋,空行,<?php ?> 標(biāo)簽, 及類及方法的聲明。
使用phpunit –coverage-clover D:\PHPAPP\XDebug\first.xml YouTest
生產(chǎn)的將會(huì)是一個(gè)xml格式的文件,這個(gè)格式的文件效果不明顯,沒(méi)有html格式的好,這邊的效果被我刪掉了所以么有效果圖可看,第三個(gè)覆蓋文件的參數(shù)我沒(méi)測(cè)試過(guò),大家有興趣可以試試。
<!--[if !supportLists]-->三、<!--[endif]-->程序執(zhí)行性能分析
XDebug除了有效的幫助分析單元測(cè)試覆蓋率之外,還可以幫組分析程序執(zhí)行的瓶頸所在,開(kāi)啟分析的功能:
xdebug.profiler_enable = on
xdebug.profiler_output_dir=D:\PHPAPP\XDebug
設(shè)置上面兩項(xiàng),然后執(zhí)行你要分析的程序,就會(huì)在上面的目錄下看到cachegrind.out.XXX的文件,這個(gè)文件直接打開(kāi)就是一些記錄,需要借助第三方的cachegrind查看工具才行,一個(gè)好用的工具是winCacheGrind,查看起來(lái)很方便。
可以看到執(zhí)行的總時(shí)間,及每個(gè)函數(shù)執(zhí)行的時(shí)間。
因?yàn)檫@個(gè)工具在打開(kāi)文件的時(shí)候,只能打開(kāi)cachegrind.out.*的文件,所以待分析的文件必須是這個(gè)名字的,所以為了省去重命名,這也就是為啥我說(shuō)不建議修改xdebug.profiler_output_name這個(gè)選項(xiàng)的原因。
XDebug除了上述方式外,還有自己的一些函數(shù)庫(kù)提供,可以在你程序的代碼段任何地方執(zhí)行,具體的請(qǐng)看http://xdebug.org/docs/all_functions
- php Xdebug 調(diào)試擴(kuò)展的安裝與使用.
- 使用NetBeans + Xdebug調(diào)試PHP程序的方法
- php性能優(yōu)化分析工具XDebug 大型網(wǎng)站調(diào)試工具
- 解析phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試
- 解析VS2010利用VS.PHP插件調(diào)試PHP的方法
- 如何使用FireFox插件FirePHP調(diào)試PHP
- 用Zend Studio+PHPnow+Zend Debugger搭建PHP服務(wù)器調(diào)試環(huán)境步驟
- phpstorm配置Xdebug進(jìn)行調(diào)試PHP教程
- 解決ThinkPHP關(guān)閉調(diào)試模式時(shí)報(bào)錯(cuò)的問(wèn)題匯總
- PHP遠(yuǎn)程調(diào)試之XDEBUG
相關(guān)文章
php彈出對(duì)話框?qū)崿F(xiàn)重定向代碼
本為大家介紹下使用php或js彈出對(duì)話框?qū)崿F(xiàn)重定向,具體示例如下,感興趣的朋友不要錯(cuò)過(guò)2014-01-01php使用curl通過(guò)代理獲取數(shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要介紹了php使用curl通過(guò)代理獲取數(shù)據(jù)的實(shí)現(xiàn)方法,主要涉及php curl中CURLOPT_PROXYUSERPWD參數(shù)的使用技巧,需要的朋友可以參考下2016-05-05php實(shí)現(xiàn)的在線人員函數(shù)庫(kù)
ME之前用的..找到了.. 在線人員函數(shù)庫(kù)2008-04-04php合并數(shù)組array_merge函數(shù)運(yùn)算符加號(hào)與的區(qū)別
“+”運(yùn)算符和array_merge():array array_merge ( array array1, array array2 [, array ...] ) 都可以合并多個(gè)數(shù)組,但使用過(guò)程中有一點(diǎn)小區(qū)別。2008-10-10PHP字符過(guò)濾函數(shù)去除字符串最后一個(gè)逗號(hào)(rtrim)
PHP字符過(guò)濾函數(shù)去除字符串最后一個(gè)逗號(hào),用php自帶的函數(shù)比較容易解決2013-03-03php簡(jiǎn)單實(shí)現(xiàn)多字節(jié)字符串翻轉(zhuǎn)的方法
這篇文章主要介紹了php簡(jiǎn)單實(shí)現(xiàn)多字節(jié)字符串翻轉(zhuǎn)的方法,涉及php操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03