cp modules/xdebug.so /usr/lib/php5/20090626+lfs 將xdebug.so文件移到php5下面
3. 編輯php.ini,加入下面幾行:
[Xdebug]
zend_extension=D:\xampp\php\ext\php_xdebug.dll (Win)
zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so(Linux)
xdebug.profiler_enable=on
xdebug.trace_output_dir="../Projects/xdebug"
xdebug.profiler_output_dir="../Projects/xdebug"
後面的目錄“../Projects/xdebug”為你想要放置Xdebug輸出的數據文件的目錄,可自由設置。
4. 重啟Apache;
5. 寫一個test.php,內容為<?php phpinfo(); ?>,如果輸出的內容中有看到xdebug,說明安裝配置成功。如下圖:
現在我們來從最簡單的程序調試開始一步步介紹Xdebug。
調試:
我們先寫一個可以導致執行出錯的程序,例如嘗試包含一個不存在的文件。
testXdebug.php
<?php
require_once(‘abc.php');
?>
然後通過浏覽器訪問,我們驚奇地發現,出錯信息變成了彩色的了:
不過除了樣式改變,和我們平時打印的出錯信息內容沒什麼不同,意義不大。好,我們繼續改寫程序:testXdebug2.php
<?php
testXdebug();
function testXdebug() {
require_once('abc.php');
}
?>
輸出信息:
發現了什麼? Xdebug跟蹤代碼的執行,找到了出錯的函數testXdebug()。
我們把代碼再寫得復雜一些:
testXdebug3.php
復制代碼 代碼如下:
<?php
testXdebug();
function testXdebug() {
requireFile();
}
function requireFile() {
require_once('abc.php');
}
?>
輸出信息:
也就是說Xdebug具有類似於Java的Exception的“跟蹤回溯”的功能,可以根據程序的執行一步步跟蹤到出錯的具體位置,哪怕程序中的調用很復雜,我們也可以通過這個功能來理清代碼關系,迅速定位,快速排錯。
其實PHP函數debug_backtrace()也有類似的功能,但是要注意debug_backtrace()函數只在PHP4.3.0之後版本及PHP5中才生效。這個函數是PHP開發團隊在PHP5中新增的函數,然後又反向移植到PHP4.3中。
如何利用Xdebug測試腳本執行時間
測試某段腳本的執行時間,通常我們都需要用到microtime()函數來確定當前時間。例如PHP手冊上的例子:
復制代碼 代碼如下:
<?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()返回的值是微秒數及絕對時間戳(例如“0.03520000 1153122275”),沒有可讀性。所以如上程序,我們需要另外寫一個函數microtime_float(),來將兩者相加。
Xdebug自帶了一個函數xdebug_time_index()來顯示時間。
如何測定腳本占用的內存?
有時候我們想知道程序執行到某個特定階段時到底占用了多大內存,為此PHP提供了函數memory_get_usage()。這個函數只有當PHP編譯時使用了-enable-memory-limit參數時才有效。
Xdebug同樣提供了一個函數xdebug_memory_usage()來實現這樣的功能,另外xdebug還提供了一個xdebug_peak_memory_usage()函數來查看內存占用的峰值。
如何檢測代碼中的不足?
有時候代碼沒有明顯的編寫錯誤,沒有顯示任何錯誤信息(如error、warning、notice等),但是這不表明代碼就是正確無誤的。有時候可能某段代碼執行時間過長,占用內存過多以致於影響整個系統的效率,我們沒有辦法直接看出來是哪部份代碼出了問題。這時候我們希望把代碼的每個階段的運行情況都監控起來,寫到日志文件中去,運行一段時間後再進行分析,找到問題所在。
回憶一下,之前我們編輯php.ini文件
加入
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="I:\Projects\xdebug"
xdebug.profiler_output_dir="I:\Projects\xdebug"
這幾行,目的就在於把執行情況的分析文件寫入到”../Projects/xdebug”目錄中去(你可以替換成任何你想設定的目錄)。如果你執行某段程序後,再打開相應的目錄,可以發現生成了一堆文件,例如cachegrind.out.1169585776這種格式命名的文件。這些就是Xdebug生成的分析文件。用編輯器打開你可以看到很多程序運行的相關細節信息,
最後:
Xdebug提供了各種自帶的函數,並對已有的某些PHP函數進行覆寫,可以方便地用於調試排錯;Xdebug還可以跟蹤程序的運行,通過對日志文件的分析,我們可以迅速找到程序運行的瓶頸所在,提高程序效率,從而提高整個系統的性能。