天天看點

php及xdebug使用小結

php下搭配使用xdebug是十分好的組合,用于php的調試工作,下面分别介紹之:

1 WINDOWS下的安裝

下載下傳站點http://www.xdebug.org/

要确定使用一個跟你的PHP配合的版本才行,比如xdebug中的5。2系列版本是跟5.2

的php搭配的,5.3系列的跟5.3的PHP搭配的。目前的版本是2。1,然後你會發現

有相應的線程安全和非安全兩個版本。如何知道下載下傳哪個版本呢,可以将你跑

PHPINFO時的顯示出來網頁的源代碼,COPY到

http://www.xdebug.org/find-binary.php中,然後送出,然後XDEBUG為告訴你

應該下載下傳哪個版本了

将下載下傳的檔案放到d:\php\ext目錄,重命名為php_xdebug.dll。

然後修改PHP。INI如下:

[Xdebug]

zend_extension="D:\php\ext\php_xdebug.dll"

xdebug.profiler_output_dir="D:\php53\xdebug"

xdebug.profiler_enable=On

xdebug.profiler_enable_trigger=1

xdebug.default_enable=On

xdebug.show_exception_trace=On

xdebug.show_local_vars=1

xdebug.max_nesting_level=50

xdebug.var_display_max_depth=6

xdebug.dump_once=On

xdebug.dump_globals=On

xdebug.dump_undefined=On

xdebug.dump.REQUEST=*

xdebug.dump.SERVER=REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT

xdebug.trace_output_dir="D:\php53\xdebug"

注意要建立一個xdebug目錄放調試輸出的檔案。

重新啟動apache,在phpinfo中就可以看到有關XDEBUG的部分了

2 LINUX下的安裝

tar -xzf xdebug-2.0.0RC3.gz

cd xdebug-2.0.0RC3

/usr/local/php/bin/phpize

./configure --enable-xdebug

cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/

注:/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/不同的PHP版本路徑不同,也不一定要放在該路徑,可以在zend_extension_ts中自行指定xdebug.so所在位置。

3 使用,可以寫個簡單程式去看效果,比如:

<?php

testXdebug();

function testXdebug() {

require_once('abc.php');

}

?>

運作後,可以看到是象JAVA一樣,用堆棧的方式去輸出錯誤的相關部分的。

4 分析xdbebug下面的輸出檔案

因為這個目錄下的檔案比較難了解,是以可以下載下傳工具來分析之,比如:

KCacheGrind(适用于Linux)、WinCacheGrind(适用于Windows)和Webgrind(Web頁面方式)。

我用的是WinCacheGrind(http://sourceforge.net/projects/wincachegrind)

之後就可以打開輸出檔案來去看了。

5 xdebug的一些配置

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在錯環境中所産生的堆棧轉儲還将顯示所有局部變量,包括尚未初始化的變量在最上面。要注意的是這将産生大量的資訊,也是以預設情況下是關閉的。

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用戶端預設的端口。許多用戶端都使用這個端口數字,最好不要去修改這個設定

php及xdebug使用小結