• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Xdebug是一個(gè)開(kāi)放源代碼的PHP程序調(diào)試器

            轉(zhuǎn)載自:http://blog.csdn.net/guoguo1980/article/details/1041725
            為什么需要Debugger?
            很多PHP程序員調(diào)試使用echo、print_r()、var_dump()、printf()等,其實(shí)對(duì)于有較豐富開(kāi)發(fā)經(jīng)驗(yàn)的程序員來(lái)說(shuō)這些也已經(jīng)足夠了,他們往往可以在程序執(zhí)行的過(guò)程中,通過(guò)輸出特定變量的值可以判斷程序執(zhí)行是否正確,甚至效率高低也可以看出來(lái)(當(dāng)然可能還需要使用一些時(shí)間函數(shù))。那么我們?yōu)槭裁催€需要一個(gè)專門的調(diào)試程序來(lái)監(jiān)控我們的程序運(yùn)行呢? 這個(gè)問(wèn)題的答案不妨留到后面來(lái)揭曉。
            什么是Xdebug?
            Xdebug是一個(gè)開(kāi)放源代碼的PHP程序調(diào)試器(即一個(gè)Debug工具),可以用來(lái)跟蹤,調(diào)試和分析PHP程序的運(yùn)行狀況。Xdebug現(xiàn)在的最新版本是xdebug 2.0.0beta6,支持PHP4/PHP5
            官方站點(diǎn):www.Xdebug.org
            如何安裝Xdebug
            以PHP5.1.4,Windows平臺(tái)為例(其它PHP版本,其它平臺(tái)請(qǐng)參看官網(wǎng)文檔):
            1. 登錄www.xdebug.org,在首頁(yè)右側(cè)有一個(gè)Windows modules,選擇其中的PHP5.1.2+,下載php_xdebug-5.1.2-2.0.0beta6.dll文件;
            2. 將下載的php_xdebug-5.1.2-2.0.0beta6.dll放到C:/php5/ext目錄,重命名為php_xdebug.dll
            3. 編輯php.ini,加入下面幾行:
            extension=php_xdebug.dll
            [Xdebug]
            xdebug.profiler_enable=on
            xdebug.trace_output_dir="I:/Projects/xdebug"
            xdebug.profiler_output_dir="I:/Projects/xdebug" 
            后面的目錄“I:/Projects/xdebug”為你想要放置Xdebug輸出的數(shù)據(jù)文件的目錄,可自由設(shè)置。
            4. 重啟Apache
            5. 寫一個(gè)test.php,內(nèi)容為<?php phpinfo(); ?>,如果輸出的內(nèi)容中有看到xdebug,說(shuō)明安裝配置成功。

            現(xiàn)在我們就可以開(kāi)始使用Xdebug強(qiáng)大的功能了!

              

            作者:Haohappy     

            MSN: haohappy at msn.com

            Blog: http://blog.csdn.net/haohappy2004

            2006-07-04

            Go on..現(xiàn)在我們來(lái)從最簡(jiǎn)單的程序調(diào)試開(kāi)始一步步介紹Xdebug。

            調(diào)試:

            我們先寫一個(gè)可以導(dǎo)致執(zhí)行出錯(cuò)的程序,例如嘗試包含一個(gè)不存在的文件。

            testXdebug.php

             

            <?php

            require_once(‘abc.php’);

            ?>

             

             

            然后通過(guò)瀏覽器訪問(wèn),我們驚奇地發(fā)現(xiàn),出錯(cuò)信息變成了彩色的了:

             

            不過(guò)除了樣式改變,和我們平時(shí)打印的出錯(cuò)信息內(nèi)容沒(méi)什么不同,意義不大。好,我們繼續(xù)改寫程序:

             

             

            testXdebug2.php

             

            <?php

            testXdebug();

            function testXdebug() {

                   require_once('abc.php');

            }

            ?>

             

            輸出信息:

             

            發(fā)現(xiàn)了什么? Xdebug跟蹤代碼的執(zhí)行,找到了出錯(cuò)的函數(shù)testXdebug()

             

             

            我們把代碼再寫得復(fù)雜一些: 

            testXdebug3.php

            <?php

            testXdebug();

            function testXdebug() {

                   requireFile();    

            }

            function requireFile() {

                   require_once('abc.php');

            }

            ?>

            輸出信息:

            呵呵,也就是說(shuō)Xdebug具有類似于JavaException的“跟蹤回溯”的功能,可以根據(jù)程序的執(zhí)行一步步跟蹤到出錯(cuò)的具體位置,哪怕程序中的調(diào)用很復(fù)雜,我們也可以通過(guò)這個(gè)功能來(lái)理清代碼關(guān)系,迅速定位,快速排錯(cuò)。

            作者:Haohappy     

            MSN: haohappy at msn.com

            Blog: http://blog.csdn.net/haohappy2004

            2006-07-04

            其實(shí)PHP函數(shù)debug_backtrace()也有類似的功能,但是要注意debug_backtrace()函數(shù)只在PHP4.3.0之后版本及
            PHP5中才生效。這個(gè)函數(shù)是PHP開(kāi)發(fā)團(tuán)隊(duì)在PHP5中新增的函數(shù),然后又反向移植到PHP4.3中。
            如何利用Xdebug使調(diào)試信息更加美觀?
            Xdebug擴(kuò)展加載后,Xdebug會(huì)對(duì)原有的某些PHP函數(shù)進(jìn)行覆寫,以便好更好地進(jìn)行Debug。比如var_dump()函數(shù),我們知道通常我們需要在函數(shù)前后加上”<pre>…</pre>”才能夠讓輸出的變量信息比較美觀、可讀性好。但是加載了Xdebug后,我們不再需要這樣做了,Xdebug不但自動(dòng)給我們加上了<pre>標(biāo)簽,還給變量加上顏色。
            例:
            <?php
            $arrTest=array(
                   "test"=>"abc",
                   "test2"=>"abc2"
            );
            var_dump($arrTest);
            ?>
            輸出:
            看到了嗎? 數(shù)組元素的值自動(dòng)顯示顏色。
            如何利用Xdebug測(cè)試腳本執(zhí)行時(shí)間
            測(cè)試某段腳本的執(zhí)行時(shí)間,通常我們都需要用到microtime()函數(shù)來(lái)確定當(dāng)前時(shí)間。例如PHP手冊(cè)上的例子:
            <?php
            /**
            * Simple function to replicate PHP 5 behaviour
            */
            function microtime_float()
            {
                list(
            $usec, $sec) = explode(" ", microtime());
            return ((float)$usec + (float)$sec);
            }

            $time_start = microtime_float();
            // Sleep for a while
            usleep(100);
            $time_end = microtime_float();
            $time = $time_end - $time_start;
            echo 
            "Did nothing in $time seconds/n";
            ?>
            但是microtime()返回的值是微秒數(shù)及絕對(duì)時(shí)間戳(例如“0.03520000 1153122275),沒(méi)有可讀性。所以如上程序,我們需要另外寫一個(gè)函數(shù)microtime_float(),來(lái)將兩者相加。
            Xdebug自帶了一個(gè)函數(shù)xdebug_time_index()來(lái)顯示時(shí)間。
            如何測(cè)定腳本占用的內(nèi)存?
            有時(shí)候我們想知道程序執(zhí)行到某個(gè)特定階段時(shí)到底占用了多大內(nèi)存,為此PHP提供了函數(shù)memory_get_usage()。這個(gè)函數(shù)只有當(dāng)PHP編譯時(shí)使用了--enable-memory-limit參數(shù)時(shí)才有效。 
            Xdebug同樣提供了一個(gè)函數(shù)xdebug_memory_usage()來(lái)實(shí)現(xiàn)這樣的功能,另外xdebug還提供了一個(gè)xdebug_peak_memory_usage()函數(shù)來(lái)查看內(nèi)存占用的峰值。
            如何檢測(cè)代碼中的不足?
            有時(shí)候代碼沒(méi)有明顯的編寫錯(cuò)誤,沒(méi)有顯示任何錯(cuò)誤信息(如errorwarningnotice等),但是這不表明代碼就是正確無(wú)誤的。有時(shí)候可能某段代碼執(zhí)行時(shí)間過(guò)長(zhǎng),占用內(nèi)存過(guò)多以致于影響整個(gè)系統(tǒng)的效率,我們沒(méi)有辦法直接看出來(lái)是哪部份代碼出了問(wèn)題。這時(shí)候我們希望把代碼的每個(gè)階段的運(yùn)行情況都監(jiān)控起來(lái),寫到日志文件中去,運(yùn)行一段時(shí)間后再進(jìn)行分析,找到問(wèn)題所在。
            回憶一下,之前我們編輯php.ini文件
            加入
            [Xdebug]
            xdebug.profiler_enable=on
            xdebug.trace_output_dir="I:/Projects/xdebug"
            xdebug.profiler_output_dir="I:/Projects/xdebug" 
            這幾行,目的就在于把執(zhí)行情況的分析文件寫入到I:/Projects/xdebug”目錄中去(你可以替換成任何你想設(shè)定的目錄)。如果你執(zhí)行某段程序后,再打開(kāi)相應(yīng)的目錄,可以發(fā)現(xiàn)生成了一堆文件,例如cachegrind.out.1169585776這種格式命名的文件。這些就是Xdebug生成的分析文件。用編輯器打開(kāi)你可以看到很多程序運(yùn)行的相關(guān)細(xì)節(jié)信息,不過(guò)很顯然這樣看太累了,我們需要用圖形化的軟件來(lái)查看。
            Windows平臺(tái)下,可以用WinCacheGrind(*我修改的*下載地址http://sourceforge.net/projects/wincachegrind/)這個(gè)軟件來(lái)打開(kāi)這些文件。可以直觀漂亮地顯示其中內(nèi)容:
            哇,非常漂亮,我們很直觀地看到index.php中我們調(diào)用了一個(gè)函數(shù)testXdebug()testXdebug()中又調(diào)用了requireFile()函數(shù)。這樣我們就可以非常方便地查看整個(gè)腳本的程序結(jié)構(gòu)。
            另外,我們還可以看到每個(gè)函數(shù)被調(diào)用的次數(shù)及執(zhí)行所花費(fèi)的時(shí)間!這對(duì)于測(cè)試程序性能非常有用。
            好了,這么一個(gè)簡(jiǎn)單的程序不太能顯示出Xdebug+WinCacheGrind的強(qiáng)大,我給出一個(gè)稍大點(diǎn)的例子(一個(gè)基于Zend FrameworkCMSindex.php):
            從上圖可以看到:整個(gè)程序的結(jié)構(gòu),每個(gè)函數(shù)被調(diào)用的次數(shù),執(zhí)行時(shí)間都一目了然。
            小結(jié):
            Xdebug提供了各種自帶的函數(shù),并對(duì)已有的某些PHP函數(shù)進(jìn)行覆寫,可以方便地用于調(diào)試排錯(cuò);Xdebug還可以跟蹤程序的運(yùn)行,通過(guò)對(duì)日志文件的分析,我們可以迅速找到程序運(yùn)行的瓶頸所在,提高程序效率,從而提高整個(gè)系統(tǒng)的性能。



            posted on 2014-06-15 09:59 楊粼波 閱讀(407) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            18禁黄久久久AAA片| 久久ZYZ资源站无码中文动漫 | 久久精品免费一区二区| 亚洲国产精品无码久久98| 久久精品国产亚洲av日韩| 国内精品久久久久久久coent| 久久久久亚洲AV成人网人人网站 | 日本久久久久久中文字幕| 99久久国产综合精品网成人影院| 久久精品中文闷骚内射| 久久人人爽人人澡人人高潮AV| 色狠狠久久AV五月综合| 日韩久久久久中文字幕人妻| 久久国产欧美日韩精品| 日韩久久久久中文字幕人妻| 国产精品久久久久AV福利动漫| 亚洲国产精品成人AV无码久久综合影院| 久久无码人妻一区二区三区| 亚洲一区精品伊人久久伊人| 香蕉久久一区二区不卡无毒影院| 亚洲精品乱码久久久久久蜜桃不卡 | 无码人妻久久一区二区三区蜜桃| 国内精品伊人久久久久AV影院| 无码8090精品久久一区 | 久久99热只有频精品8| 久久亚洲中文字幕精品一区| 久久男人中文字幕资源站| 亚洲一区二区三区日本久久九| 日韩人妻无码精品久久久不卡 | 日本久久中文字幕| 国产高清国内精品福利99久久| 久久精品www人人爽人人| 亚洲va国产va天堂va久久| 精品国产乱码久久久久软件| 欧美精品九九99久久在观看| 日韩中文久久| 亚洲精品视频久久久| 久久亚洲熟女cc98cm| 亚洲国产精品久久久天堂 | 久久人人爽人人爽人人爽| 久久无码国产专区精品|