那天校長(zhǎng)分析了關(guān)于數(shù)據(jù)庫(kù)的分析及優(yōu)化的一些方法,很好用,也體會(huì)性能作為應(yīng)用程序的重要指標(biāo),需要我們重視。今天我就就自己對(duì)XDebug使用的一些體驗(yàn)做一小段分享。XDebug也是因?yàn)樾枰怯脕?lái)生成覆蓋率分析文件才安裝的,剛接觸不久,平時(shí)用的也不是很頻繁,但是這個(gè)的確是一個(gè)好工具,如果想要依賴它來(lái)分析程序的性能還是需要自己親手去試試。具體它有多好,請(qǐng)聽我一一道來(lái)。
一、安裝篇(XDebug和PHPUnit)
A:安裝XDebug:
Xdebug網(wǎng)下載xdebugdll文件,存放到php加載的ext目錄下(可以選擇重命名,比如php_xdebug.dll,然后打開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:開啟性能分析,
開啟這個(gè)之后會(huì)在xdebug.profiler_output_dir這個(gè)目錄下生成cachegrind.out.XXX的分析文件,如果指定了xdebug.profiler_output_name這個(gè),則輸出來(lái)的文件就會(huì)是指定的名字.xxx的格式(此方法不適合分析,原因稍后說(shuō)明),
xdebug.trace_options:這個(gè)是開啟跟蹤項(xiàng),
開啟該項(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ī)子沒有安裝過(guò)pear包需要先安裝下,一般在php安裝的時(shí)候在其安裝目錄下都有一個(gè)go-pear.bat文件,直接執(zhí)行即可完成安裝,【這里安裝需要注意擴(kuò)展exif,這個(gè)擴(kuò)展會(huì)用到mbstring擴(kuò)展中的方法,所以mbstring的加載順序需要再exif之上。】完成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)樵赬Debug安裝成功之后才能用,這三個(gè)對(duì)于導(dǎo)出覆蓋率文件可是很重要的選項(xiàng)。
二、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:代表沒有實(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ì)不飽行注釋,空行,標(biāo)簽,及類及方法的聲明。
使用phpunit –coverage-clover D:\PHPAPP\XDebug\first.xmlYouTest
生產(chǎn)的將會(huì)是一個(gè)xml格式的文件,這個(gè)格式的文件效果不明顯,沒有html格式的好,這邊的效果被我刪掉了所以么有效果圖可看,第三個(gè)覆蓋文件的參數(shù)我沒測(cè)試過(guò),大家有興趣可以試試。
三、程序執(zhí)行性能分析
XDebug除了有效的幫助分析單元測(cè)試覆蓋率之外,還可以幫組分析程序執(zhí)行的瓶頸所在,開啟分析的功能:
xdebug.profiler_enable = on
xdebug.profiler_output_dir=D:\PHPAPP\XDebug
設(shè)置上面兩項(xiàng),然后執(zhí)行你要分析的程序,就會(huì)在上面的目錄下看到cachegrind.out.XXX的文件,這個(gè)文件直接打開就是一些記錄,需要借助第三方的cachegrind查看工具才行,一個(gè)好用的工具是winCacheGrind,查看起來(lái)很方便。
可以看到執(zhí)行的總時(shí)間,及每個(gè)函數(shù)執(zhí)行的時(shí)間。
因?yàn)檫@個(gè)工具在打開文件的時(shí)候,只能打開cachegrind.out.*的文件,所以待分析的文件必須是這個(gè)名字的,所以為了省去重命名,這也就是為啥我說(shuō)不建議修改xdebug.profiler_output_name這個(gè)選項(xiàng)的原因。
四、XDebug庫(kù)函數(shù)
XDebug除了上述方式外,還有自己的一些函數(shù)庫(kù)提供,可以在你程序的代碼段任何地方執(zhí)行,具體的請(qǐng)看http://xdebug.org/docs/all_functions
的功能,還不止這些,因?yàn)樗倪x項(xiàng)·好大的一頁(yè),所以還是去http://xdebug.org/docs/這里看看官方的說(shuō)明。靠譜!