Xdebug教程

Xdebug教程分爲五個部分,從Xdebug安裝、Xdubug使用、Xdebug配置、Xdebug調試到WinCacheGrind工具的使用.

一、Xdebug安裝(博客學習分享中有)。

 

二、Xdebug配置

 

第一部分:安裝
預編譯模塊
安裝預編譯模塊是很容易的。只需要將它們放到一個目錄中,並將下面的內容添加到php.ini中:(不要忘記更改路徑和文件名爲你自己的值,並確信你使用的是完整路)
zend_extension_ts = "c:/php/modules/php_xdebug.dll"

第二部分:基本特徵 :
相關參數設置
xdebug.default_enable
類型:布爾型 默認值:On
如果這項設置爲On,堆棧跟蹤將被默認的顯示在錯誤事件中。你可以通過在代碼中使用xdebug_disable()來禁止堆疊跟蹤的顯示。因爲這是xdebug基本功能之一,將這項參數設置爲On是比較明智的。

xdebug.max_nesting_level
類型:整型 默認值:100
The value of this setting is the maximum level of nested functions that are allowed before the script will be aborted.
限制無限遞歸的訪問深度。這項參數設置的值是腳本失敗前所允許的嵌套程序的最大訪問深度。

第三部分:堆棧跟蹤 :
相關參數設置
xdebug.dump_globals
類型:布爾型 默認值:1
限制是否顯示被xdebug.dump.*設置定義的超全局變量的值
例如,xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT 將打印 PHP 超全局變量 $_SERVER['REQUEST_METHOD']、$_SERVER['REQUEST_URI'] 和 $_SERVER['HTTP_USER_AGENT']。

xdebug.dump_once
類型:布爾型 默認值:1
限制是否超全局變量的值應該轉儲在所有出錯環境(設置爲Off時)或僅僅在開始的地方(設置爲On時)

xdebug.dump_undefined
類型:布爾型 默認值:0
如果你想從超全局變量中轉儲未定義的值,你應該把這個參數設置成On,否則就設置成Off

xdebug.show_exception_trace
類型:整型 默認值:0
當這個參數被設置爲1時,即使捕捉到異常,xdebug仍將強制執行異常跟蹤當一個異常出現時。

xdebug.show_local_vars
類型:整型 默認值:0
當這個參數被設置爲不等於0時,xdebug在錯環境中所產生的堆棧轉儲還將顯示所有局部變量,包括尚未初始化的變量在最上面。要注意的是這將產生大量的信息,也因此默認情況下是關閉的。

第四部分:分析PHP腳本
相關參數設置
xdebug.profiler_append
類型:整型 默認值:0
當這個參數被設置爲1時,文件將不會被追加當一個新的需求到一個相同的文件時(依靠xdebug.profiler_output_name的設置)。相反的設置的話,文件將被附加成一個新文件。

xdebug.profiler_enable
類型:整型 默認值:0
開放xdebug文件的權限,就是在文件輸出目錄中創建文件。那些文件可以通過KCacheGrind來閱讀來展現你的數據。這個設置不能通過在你的腳本中調用ini_set()來設置。

xdebug.profiler_output_dir
類型:字符串 默認值:/tmp
這個文件是profiler文件輸出寫入的,確信PHP用戶對這個目錄有寫入的權限。這個設置不能通過在你的腳本中調用ini_set()來設置。

xdebug.profiler_output_name
類型:字符串 默認值:cachegrind.out%p
這個設置決定了轉儲跟蹤寫入的文件的名稱。

第五部分:遠程Debug
相關參數設置
xdebug.remote_autostart
類型:布爾型 默認值:0
一般來說,你需要使用明確的HTTP GET/POST變量來開啓遠程debug。而當這個參數設置爲On,xdebug將經常試圖去開啓一個遠程debug session並試圖去連接客戶端,即使GET/POST/COOKIE變量不是當前的。

xdebug.remote_enable
類型:布爾型 默認值:0
這個開關控制xdebug是否應該試着去連接一個按照xdebug.remote_host和xdebug.remote_port來設置監聽主機和端口的debug客戶端。

xdebug.remote_host
類型:字符串 默認值:localhost
選擇debug客戶端正在運行的主機,你不僅可以使用主機名還可以使用IP地址

xdebug.remote_port
類型:整型 默認值:9000
這個端口是xdebug試着去連接遠程主機的。9000是一般客戶端和被綁定的debug客戶端默認的端口。許多客戶端都使用這個端口數字,最好不要去修改這個設置。

注意 :所有以上參數修改後,要重啓Apache才能生效!

 

三、調試

Xdebug擴展加載後,Xdebug會對原有的某些PHP函數進行覆寫,以便好更好地進行Debug。比如var_dump()函數,我們知道通常我們需要在函數前後加上”<pre>…</pre>”才能夠讓輸出的變量信息比較美觀、可讀性好。但是加載了Xdebug後,我們不再需要這樣做了,Xdebug不但自動給我們加上了<pre>標籤,還給變量加上顏色。

例:

<?php
   $arrTest=array(
       "test"=>"abc",
       "test2"=>"abc2"
   );

   var_dump($arrTest);
?>

 輸出:

array

  'test' =>
 
 'abc'
 (length=3)

  'test2' =>
 
 'abc2'
 (length=4)

    數組元素的值自動顯示顏色。

 

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腳本佔用的內存
有時候我們想知道程序執行到某個特定階段時到底佔用了多大內存,爲此PHP提供了函數memory_get_usage()。這個函數只有當PHP編譯時使用了--enable-memory-limit參數時纔有效。 

Xdebug同樣提供了一個函數xdebug_memory_usage()來實現這樣的功能,另外xdebug還提供了一個xdebug_peak_memory_usage()函數來查看內存佔用的峯值。

 

WinCacheGrind工具可以直接下載綠色版的

執行情況的分析文件在之前修改的php.ini文件(如:我的配置是D:\xdebug),用我inCacheGrind打開此文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章