標籤:
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.ini代碼
- [Xdebug]
- extension=php_xdebug.dll
- xdebug.profiler_enable=on
- xdebug.trace_output_dir="d:\temp\xdebug"
- xdebug.profiler_output_dir="d:\temp\xdebug"
註:output_dir需要手工事先建好,否則不會產生profiler資料到該目錄。
3. 測試安裝成功
重新啟動apache, 運行<?php phpinfo()?>,看到如下選項表明安裝成功
4. 開始調試
1). Test Case1
Php代碼
- <?php
- require_once(‘empty.php‘);
- ?>
運行結果
xdebug的輸出檔案格式(cachegrind.out)
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的檔案名稱 |
從上表可以找到一些適合你的參數。
比如,我想針對每個檔案產生一個輸出檔案。
那麼我可以用:
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才會生效!
=======================================================
XDebug分析php代碼效能