安裝/使用/調(diào)試xdebug以及xdebug參數(shù)設(shè)置的教程

2011-02-16 14:21:28來源:JS8.IN作者:

xdebug是PHP的一個(gè)擴(kuò)展應(yīng)用,有了xdebug就可以輕松的調(diào)試PHP程序,有了它,我們就不用使用var_dump(),print_r()之類的傻瓜調(diào)試函數(shù)了。
Xdebug則提供了更多的功能,能全方位的對(duì)PHP腳本進(jìn)行調(diào)試。Xdebug主要的功能

xdebug是PHP的一個(gè)擴(kuò)展應(yīng)用,有了xdebug就可以輕松的調(diào)試PHP程序,有了它,我們就不用使用var_dump(),print_r()之類的傻瓜調(diào)試函數(shù)了。
Xdebug則提供了更多的功能,能全方位的對(duì)PHP腳本進(jìn)行調(diào)試。Xdebug主要的功能如下:

  1. 堆棧追蹤和函數(shù)追蹤;
  2. 錯(cuò)誤信息;
  3. 內(nèi)存分配;
  4. 剖析php腳本的信息;
  5. 代碼覆蓋率分析;
  6. 遠(yuǎn)程調(diào)試分析;

1、Ubuntu搭建xdebug調(diào)試環(huán)境

安裝Xdebug模塊

在終端中使用apt-get安裝xdebug,命令如下

sudo apt-get install php5-dev php-pear
sudo apt-get install php5-xdebug

然后打開php.ini文件(例如gedit /etc/php5/apache2/php.ini)。進(jìn)行如下配置;

;加載xdebug動(dòng)態(tài)鏈接庫(kù)
extension=xdebug.so
;xdebug分析文件輸出路徑
xdebug.profiler_output_dir = “/var/www/xdebug/”
;分析器默認(rèn)是關(guān)閉,調(diào)試的時(shí)候在url中加入XDEBUG_PROFILE=true即可
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = 1

重啟apache,這樣就可以使用xdebug調(diào)試PHP了。

2、windows下安裝xdebug

以PHP5.1.4,Windows平臺(tái)為例(其它PHP版本,其它平臺(tái)請(qǐng)參看官網(wǎng)文檔):
1. 登錄www.xdebug.org,在首頁(yè)右側(cè)有一個(gè)Windows modules,選擇其中的PHP5.1.2+,下載php_xdebug-5.1.2-2.0.0beta6.dll文件;
2. 將下載的php_xdebug-5.1.2-2.0.0beta6.dll放到C:\php5\ext目錄,重命名為php_xdebug.dll;
3. 編輯php.ini,加入下面幾行:

extension=php_xdebug.dll
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir=”I:\Projects\xdebug”
xdebug.profiler_output_dir=”I:\Projects\xdebug”
xdebug.dump.GET=*
xdebug.show_local_vars=1

具體參數(shù)PHP.ini說明參見ubuntu下的注釋。

3、使用xdebug進(jìn)行PHP調(diào)試

xdebug調(diào)試變量更加友好

Xdebug重寫了php里面var_dump()函數(shù)。
xdebug里的var_dump()給變量對(duì)象有不同的顏色,顯示類型長(zhǎng)度,還可以控制顯示層次,顯示的方式經(jīng)過格式化,清晰友好。
需要使用此功能,有如下參數(shù)需注意。
 

;是否覆蓋php里面的函數(shù)var_dump();默認(rèn)是開啟的,值為1;設(shè)為0,則關(guān)閉;
xdebug.overload_var_dump = 1
;控制數(shù)組子元素顯示的大小默認(rèn)為256
xdebug.var_display_max_children = 256
;控制變量打印的大小,默認(rèn)為512
xdebug.var_display_max_data = 512
;控制數(shù)組和對(duì)象元素顯示的層級(jí)。默認(rèn)為3
xdebug.var_display_max_depth = 3

xdebug的堆棧追蹤功能

如果腳本中出現(xiàn)函數(shù)參數(shù)不正確,方法重復(fù),語法錯(cuò)誤等錯(cuò)誤的時(shí)候。xdebug能追蹤其錯(cuò)誤產(chǎn)生的產(chǎn)生的過程。

參數(shù)配置請(qǐng)參考http://xdebug.com/docs/stack_trace;一般來說,很少需要配置。

4、使用xdebug進(jìn)行腳本性能測(cè)試

在php.ini做如下配置

;默認(rèn)為0,不開啟xdebug調(diào)試器;
xdebug.profiler_enable = 0
;默認(rèn)為0;這里設(shè)為1,可以通過XDEBUG_PROFILE參數(shù)通過GET/POST傳遞
xdebug.profiler_enable_trigger = 1

測(cè)試性能結(jié)果查看工具

測(cè)試完畢后,我們需要查看下測(cè)試結(jié)果,從而找到PHP的瓶頸。
這里推薦使用兩款查看工具,ubuntu下可以使用KCachegrind,windows下可以使用WinCacheGrind。具體查看xdebug測(cè)試結(jié)果工具使用方法自己谷歌,很簡(jiǎn)單。懂點(diǎn)E文就可以看懂的。

5、xdebug使用注意及相關(guān)參數(shù)說明

xdebug使用注意

如果您在 phpinfo() 的輸出中沒有看到 Xdebug 部分,則 Xdebug 裝入失敗。Apache 錯(cuò)誤日志會(huì)列出原因。常見錯(cuò)誤包括 zend_extension 的路徑錯(cuò)誤或者與其他擴(kuò)展發(fā)生沖突。例如,如果需要使用 XCache 和 Xdebug,一定要先裝入 XCache。但是,由于 Xdebug 適于在開發(fā)時(shí)使用并假定 xdebug.so 的路徑正確,因此需要禁用其他擴(kuò)展并重試。然后您可以重新啟用擴(kuò)展以執(zhí)行其他測(cè)試,如緩存的效果。

Xdebug 站點(diǎn)還有其他一些故障檢修技巧。

xdebug相關(guān)參數(shù)設(shè)置

xdebug.default_enable

類型:布爾型 默認(rèn)值:On
如果這項(xiàng)設(shè)置為On,堆棧跟蹤將被默認(rèn)的顯示在錯(cuò)誤事件中。你可以通過在代碼中使用xdebug_disable()來禁止堆疊跟蹤的顯示。因?yàn)檫@是xdebug基本功能之一,將這項(xiàng)參數(shù)設(shè)置為On是比較明智的。

xdebug.max_nesting_level

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

xdebug.dump_globals

類型:布爾型 默認(rèn)值:1
限制是否顯示被xdebug.dump.*設(shè)置定義的超全局變量的值
例如,xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT 將打印 PHP 超全局變量 $_SERVER['REQUEST_METHOD']、$_SERVER['REQUEST_URI'] 和 $_SERVER['HTTP_USER_AGENT']。

xdebug.dump_once

類型:布爾型 默認(rèn)值:1
限制是否超全局變量的值應(yīng)該轉(zhuǎn)儲(chǔ)在所有出錯(cuò)環(huán)境(設(shè)置為Off時(shí))或僅僅在開始的地方(設(shè)置為On時(shí))

xdebug.dump_undefined

類型:布爾型 默認(rèn)值:0
如果你想從超全局變量中轉(zhuǎn)儲(chǔ)未定義的值,你應(yīng)該把這個(gè)參數(shù)設(shè)置成On,否則就設(shè)置成Off

xdebug.show_exception_trace

類型:整型 默認(rèn)值:0
當(dāng)這個(gè)參數(shù)被設(shè)置為1時(shí),即使捕捉到異常,xdebug仍將強(qiáng)制執(zhí)行異常跟蹤當(dāng)一個(gè)異常出現(xiàn)時(shí)。

xdebug.show_local_vars

類型:整型 默認(rèn)值:0
當(dāng)這個(gè)參數(shù)被設(shè)置為不等于0時(shí),xdebug在錯(cuò)環(huán)境中所產(chǎn)生的堆棧轉(zhuǎn)儲(chǔ)還將顯示所有局部變量,包括尚未初始化的變量在最上面。要注意的是這將產(chǎn)生大量的信息,也因此默認(rèn)情況下是關(guān)閉的。

xdebug.profiler_append

類型:整型 默認(rèn)值:0
當(dāng)這個(gè)參數(shù)被設(shè)置為1時(shí),文件將不會(huì)被追加當(dāng)一個(gè)新的需求到一個(gè)相同的文件時(shí)(依靠xdebug.profiler_output_name的設(shè)置)。相反的設(shè)置的話,文件將被附加成一個(gè)新文件。

xdebug.profiler_enable

類型:整型 默認(rèn)值:0
開放xdebug文件的權(quán)限,就是在文件輸出目錄中創(chuàng)建文件。那些文件可以通過KCacheGrind來閱讀來展現(xiàn)你的數(shù)據(jù)。這個(gè)設(shè)置不能通過在你的腳本中調(diào)用ini_set()來設(shè)置。

xdebug.profiler_output_dir

類型:字符串 默認(rèn)值:/tmp
這個(gè)文件是profiler文件輸出寫入的,確信PHP用戶對(duì)這個(gè)目錄有寫入的權(quán)限。這個(gè)設(shè)置不能通過在你的腳本中調(diào)用ini_set()來設(shè)置。

xdebug.profiler_output_name

類型:字符串 默認(rèn)值:cachegrind.out%p
這個(gè)設(shè)置決定了轉(zhuǎn)儲(chǔ)跟蹤寫入的文件的名稱。

xdebug.remote_autostart

類型:布爾型 默認(rèn)值:0
一般來說,你需要使用明確的HTTP GET/POST變量來開啟遠(yuǎn)程debug。而當(dāng)這個(gè)參數(shù)設(shè)置為On,xdebug將經(jīng)常試圖去開啟一個(gè)遠(yuǎn)程debug session并試圖去連接客戶端,即使GET/POST/COOKIE變量不是當(dāng)前的。

xdebug.remote_enable

類型:布爾型 默認(rèn)值:0
這個(gè)開關(guān)控制xdebug是否應(yīng)該試著去連接一個(gè)按照xdebug.remote_host和xdebug.remote_port來設(shè)置監(jiān)聽主機(jī)和端口的debug客戶端。

xdebug.remote_host

類型:字符串 默認(rèn)值:localhost
選擇debug客戶端正在運(yùn)行的主機(jī),你不僅可以使用主機(jī)名還可以使用IP地址

xdebug.remote_port

類型:整型 默認(rèn)值:9000
這個(gè)端口是xdebug試著去連接遠(yuǎn)程主機(jī)的。9000是一般客戶端和被綁定的debug客戶端默認(rèn)的端口。許多客戶端都使用這個(gè)端口數(shù)字,最好不要去修改這個(gè)設(shè)置。

注意:所有以上參數(shù)修改后,要重啟Apache才能生效!

原文:http://www.js8.in/674.html
關(guān)鍵詞:xdebugphp

贊助商鏈接: