xdebug是PHP的一個擴展應用,有了xdebug就可以輕松的調試PHP程序,有了它,我們就不用使用var_dump()
,print_r()
之類的傻瓜調試函數了。
Xdebug則提供了更多的功能,能全方位的對PHP腳本進行調試。Xdebug主要的功能如下:
- 堆棧追蹤和函數追蹤;
- 錯誤信息;
- 內存分配;
- 剖析php腳本的信息;
- 代碼覆蓋率分析;
- 遠程調試分析;
1、Ubuntu搭建xdebug調試環境
安裝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)。進行如下配置;
;加載xdebug動態鏈接庫
extension=xdebug.so
;xdebug分析文件輸出路徑
xdebug.profiler_output_dir = “/var/www/xdebug/”
;分析器默認是關閉,調試的時候在url中加入XDEBUG_PROFILE=true即可
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = 1
重啟apache,這樣就可以使用xdebug調試PHP了。
2、windows下安裝xdebug
以PHP5.1.4,Windows平臺為例(其它PHP版本,其它平臺請參看官網文檔):
1. 登錄www.xdebug.org,在首頁右側有一個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
具體參數PHP.ini說明參見ubuntu下的注釋。
3、使用xdebug進行PHP調試
xdebug調試變量更加友好
Xdebug重寫了php里面var_dump()
函數。
xdebug里的var_dump()給變量對象有不同的顏色,顯示類型長度,還可以控制顯示層次,顯示的方式經過格式化,清晰友好。
需要使用此功能,有如下參數需注意。
;是否覆蓋php里面的函數var_dump();默認是開啟的,值為1;設為0,則關閉;
xdebug.overload_var_dump = 1
;控制數組子元素顯示的大小默認為256
xdebug.var_display_max_children = 256
;控制變量打印的大小,默認為512
xdebug.var_display_max_data = 512
;控制數組和對象元素顯示的層級。默認為3
xdebug.var_display_max_depth = 3
xdebug的堆棧追蹤功能
如果腳本中出現函數參數不正確,方法重復,語法錯誤等錯誤的時候。xdebug能追蹤其錯誤產生的產生的過程。
參數配置請參考http://xdebug.com/docs/stack_trace;一般來說,很少需要配置。
4、使用xdebug進行腳本性能測試
在php.ini做如下配置
;默認為0,不開啟xdebug調試器;
xdebug.profiler_enable = 0
;默認為0;這里設為1,可以通過XDEBUG_PROFILE參數通過GET/POST傳遞
xdebug.profiler_enable_trigger = 1
測試性能結果查看工具
測試完畢后,我們需要查看下測試結果,從而找到PHP的瓶頸。
這里推薦使用兩款查看工具,ubuntu下可以使用KCachegrind,windows下可以使用WinCacheGrind。具體查看xdebug測試結果工具使用方法自己谷歌,很簡單。懂點E文就可以看懂的。
5、xdebug使用注意及相關參數說明
xdebug使用注意
如果您在 phpinfo() 的輸出中沒有看到 Xdebug 部分,則 Xdebug 裝入失敗。Apache 錯誤日志會列出原因。常見錯誤包括 zend_extension 的路徑錯誤或者與其他擴展發生沖突。例如,如果需要使用 XCache 和 Xdebug,一定要先裝入 XCache。但是,由于 Xdebug 適于在開發時使用并假定 xdebug.so 的路徑正確,因此需要禁用其他擴展并重試。然后您可以重新啟用擴展以執行其他測試,如緩存的效果。
Xdebug 站點還有其他一些故障檢修技巧。
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
這個設置決定了轉儲跟蹤寫入的文件的名稱。
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才能生效!
原文:http://www.js8.in/674.html