XDebug分析php代碼性能

XDebug是一個開放源代碼的PHP程序調試器(即一個Debug工具),能夠用來跟蹤,調試和分析PHP程序的運行情況。是一個C語言擴展包(Windows下擴展名爲.dll)。 
XDebug 下載地址:
http://xdebug.org/download.php

WinCacheGrind 下載地址:
http://sourceforge.net/projects/wincachegrind/

1. 下載 
以Windows環境下php5.2爲例。去官方下載合適的XDebug版本,看下圖,應該在前兩個連接選擇一個下載,這要取決於你的PHP5.2是否爲非線程安全仍是線程安全版,我這裏是後者,所以選擇紅框標定的連接下載 
 
下載後是一個dll文件,建議修改成更友好的文件名:php_xdebug.dll. 

2. 配置 
複製php_xdebug.dll到$php_installed_dir/ext目錄下,修改php.ini,能夠先設置以下選項: php

 
Php.ini代碼 
  1. [Xdebug]  
  2. extension=php_xdebug.dll  
  3. xdebug.profiler_enable=on  
  4. xdebug.trace_output_dir="d:\temp\xdebug"  
  5. xdebug.profiler_output_dir="d:\temp\xdebug"   


注:output_dir須要手工事先建好,不然不會生成profiler數據到該目錄。 

3. 測試安裝成功 
從新啓動apache, 運行<?php phpinfo()?>,看到以下選項代表安裝成功 
 

4. 開始調試 
1). Test Case1 html

Php代碼 
  1. <?php  
  2. require_once('empty.php');  
  3. ?>  


運行結果 


xdebug的輸出文件格式(cachegrind.out) 


apache

xdebug的輸出文件格式(cachegrind.out)安全

xdebug的性能測試輸出文件名是能夠配置的。
默認是 xdebug.profiler_output_name = cachegrind.out.%p
那個%p是服務器的pid,會輸出「cachegrind.out.1408」之類的文件。
可能這樣不太方便測試不少文件的網站。另外對於單一入口的文件名都是同樣的.
網上看到的中文文章裏面都沒有關於這個參數的說明。
 服務器

 

       
%c 當前工做目錄的crc32校驗值 trace.%c trace.1258863198.xt
%p 當前服務器進程的pid trace.%p trace.5174.xt
%r 隨機數 trace.%r trace.072db0.xt
%s 腳本文件名(注) cachegrind.out.%s cachegrind.out._home_httpd_html_test_xdebug_test_php
%t Unix時間戳(秒) trace.%t trace.1179434742.xt
%u Unix時間戳(微秒) trace.%u trace.1179434749_642382.xt
%H $_SERVER['HTTP_HOST'] trace.%H trace.kossu.xt
%R $_SERVER['REQUEST_URI'] trace.%R trace._test_xdebug_test_php_var=1_var2=2.xt
%S session_id (來自$_COOKIE 若是設置了的話) trace.%S trace.c70c1ec2375af58f74b390bbdd2a679d.xt
%% %字符 trace.%% trace.%.xt
注 此項不適用於trace file的文件名

從上表能夠找到一些適合你的參數。session

好比,我想針對每一個文件生成一個輸出文件。app

那麼我能夠用:工具

xdebug.profiler_output_name = cachegrind.out.%s性能

多個域名的話,也能夠組合使用測試

xdebug.profiler_output_name = cachegrind.out.%H.%u.%s

=============================================================

 

使用Xdebug調試和優化PHP程序系列教程之Xdebug配置,根據Xdebug的官方文檔來詳細解釋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才能生效!

=======================================================

相關文章
相關標籤/搜索