相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動到新位置)
- dirname(__FILE__)的含義和應(yīng)用說明
- thinkPHP5框架實(shí)現(xiàn)分頁查詢功能的方法示例
- PHP中單雙號與變量
- PHP獲得當(dāng)日零點(diǎn)時間戳的方法分析
- Laravel ORM對Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時進(jìn)度條顯示的實(shí)現(xiàn)
PHP調(diào)試?yán)鱔Debug的安裝與使用
很多PHP程序員調(diào)試使用echo、print_r()、var_dump()、printf()等,雖然對于有較豐富開發(fā)經(jīng)驗(yàn)的程序員來說這些也已經(jīng)足夠了,他們往往可以在程序執(zhí)行的過程中,通過輸出特定變量的值可以判斷程序執(zhí)行是否正確,甚至效率高低也可以看出來(當(dāng)然可能還需要使用一些時間函數(shù))。那么我們?yōu)槭裁催€需要一個專門的調(diào)試程序來監(jiān)控我們的程序運(yùn)行呢?
在我們平時的php開發(fā)中,一個大的項(xiàng)目經(jīng)過長時間的積累以后你會發(fā)現(xiàn)性能越來越慢,而性能到底消耗在了什么地方,常常是一個令人頭疼的問題,function a()調(diào)用了多少次,function b()又消耗了多少時間,我們到底怎么查找是哪個蛀蟲拉慢了我們的程序運(yùn)行速度呢?在這里給大家介紹一款工具xdebug,相信很多人已經(jīng)聽說過了,希望借助這個工具我們可以起到簡單分析php程序性能瓶頸的問題。
XDebug是什么
XDebug是一個開放源代碼的PHP程序調(diào)試器(即一個Debug工具),可以用來跟蹤,調(diào)試和分析PHP程序的運(yùn)行狀況。
安裝XDebug
- 訪問 www.xdebug.org ,下載php_xdebug.dll,根據(jù)版本號與自己的操作系統(tǒng)、PHP版本下載合適的。
- 將下載的php_xdebug.dll放到PHP的安裝目錄php\ext下。
- 編輯php.ini,有些集合環(huán)境已自帶xdebug的配置,如果沒有則自己手動加入下面幾行:
[xdebug] zend_extension = "/home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so" xdebug.auto_trace = on xdebug.auto_profile = on xdebug.collect_params = on xdebug.collect_return = on xdebug.profiler_enable = on xdebug.trace_output_dir = "/home/ad/xdebug_log" xdebug.profiler_output_dir = "/home/ad/xdebug_log"
XDebug參數(shù)簡介:
-
- zend_extension 加載xdebug擴(kuò)展
- xdebug.auto_trace 自動打開打開函數(shù)調(diào)用監(jiān)測
- xdebug.auto_profile 自動打開性能監(jiān)測
- xdebug.trace_output_dir 設(shè)定函數(shù)調(diào)用監(jiān)測信息的輸出文件的路徑。
- xdebug.profiler_output_dir 設(shè)定效能監(jiān)測信息輸出文件的路徑。
- xdebug.collect_params 打開收集“函數(shù)參數(shù)”的功能。將函數(shù)調(diào)用的參數(shù)值列入函數(shù)過程調(diào)用的監(jiān)測信息中。
- xdebug.collect_return 打開收集“函數(shù)返回值”的功能。將函數(shù)的返回值列入函數(shù)過程調(diào)用的監(jiān)測信息中。
- 重啟Apache。
- 寫一個test.php,內(nèi)容為<?php phpinfo(); ?>,如果輸出的內(nèi)容中有看到xdebug,說明安裝配置成功?;蛘呷?home/ad/xdebug_log下看看是不是日志已經(jīng)出來了。
設(shè)置選項(xiàng)
Category | Setting | Description |
---|---|---|
日志 |
xdebug.trace_output_dir |
日志追蹤輸出目錄 |
xdebug.trace_output_name | 日志文件名,xdebug提供了一系列的標(biāo)識符,生成相應(yīng)格式的文件名,具體請參考官網(wǎng) | |
xdebug.trace_options | 記錄添加到文件中方式:1 = 追加(如果存在該文件). 0 (default) = 覆蓋(如果存在該文件) | |
顯示數(shù)據(jù) | xdebug.collect_params |
非零值 = 控制function的參數(shù)顯示選項(xiàng)
|
xdebug.collect_return | 1 = 顯示function返回值. Default 0 不顯示 | |
xdebug.collect_vars | 1 = 顯示當(dāng)前作用域使用了哪些變量,顯示變量名,該選項(xiàng)不會記錄變量的值,如果需要,使用xdebug.collect_params | |
xdebug.collect_assignments | 1 = 添加一行顯示變量賦值(若為1,形如$a = 1;這類Assignment Expression會在trace文件里顯示) | |
格式 | xdebug.trace_format |
|
xdebug.show_mem_delta | 1 = 顯示每次函數(shù)調(diào)用內(nèi)存消耗(內(nèi)存差) | |
行為 | xdebug.auto_trace | 1 = 打開自動追蹤. (追蹤方式有2種,一種是自動追蹤,所有php腳本運(yùn)行時,都會產(chǎn)生trace文件;另一種是觸發(fā)方式追蹤,如下) |
xdebug.trace_enable_trigger[2] |
1 = 使用 XDEBUG_TRACE GET/POST 觸發(fā)追蹤, 或者通過設(shè)置cookie XDEBUG_TRACE. 為了避免每次請求時,都會生成相應(yīng)trace追蹤文件,你需要把a(bǔ)uto_trace設(shè)置為0 注:該特性只在2.2+版本才能設(shè)置 [xdebug-general] Re: Is trace_enable_trigger defunct? |
|
限制 | xdebug.var_display_max_depth | 數(shù)組和對象元素顯示深度:主要用在數(shù)組嵌套,對象屬性嵌套時,顯示幾級的元素內(nèi)容. Default 3. |
xdebug.var_display_max_data | 變量值為字符串時顯示多長. Default 512. | |
xdebug.var_display_max_children | 數(shù)組和對象元素顯示的個數(shù). Default 128 |
一些自定義函數(shù)
Function | Description |
---|---|
void xdebug_enable() | 手動打開,相當(dāng)于xdebug.default_enable=on |
void var_dump() | 覆寫php提供的var_dump,出錯時,顯示函數(shù)堆棧信息,(前提:php.ini里html_errors為1),使用xdebug.overload_var_dump 設(shè)置是否覆寫 |
void xdebug_start_trace( string trace_file_path [, integer options] ) |
手動控制需要追蹤的代碼段 trace_file_path :文件路徑(相對或絕對,若為空).如果為空,或者不傳參, 使用xdebug.trace_output_dir設(shè)置的目錄 options :
|
void xdebug_stop_trace() | 停止追蹤,代碼追蹤在該行停止 |
string xdebug_get_tracefile_name() | 獲得輸出文件名,與 xdebug.auto_trace配合使用. |
void xdebug_var_dump([mixed var[,...]]) | 輸出變量詳細(xì)信息,相當(dāng)于php里的var_dump,具體顯示請看這里 |
xdebug.show_local_vars | 默認(rèn)為0,不顯示;非零時,在php執(zhí)行出錯時,顯示出錯代碼所在作用域所有本地變量(注:這會產(chǎn)生大量信息,因此默認(rèn)是closed),具體顯示差別如下圖[3] |
array xdebug_get_declared_vars() | 顯示當(dāng)前作用域中已聲明的變量 |
array xdebug_get_code_coverage() | 顯示某一段代碼內(nèi),代碼執(zhí)行到哪些行[4] |
關(guān)于xdebug.trace_format=1,如果你使用觸發(fā)方式啟用代碼追蹤:(xdebug.auto_trace = 0;xdebug.trace_enable_trigger = 1),那么,你可以在URL里添加XDEBUG_TRACE,例如:localhost/test.php?XDEBUG_TRACE,或者localhost//test.php?XDEBUG_TRACE=1(任意值)。
是不是覺得很麻煩,那么裝個插件,讓它來幫你。Chrome XDEBUG Helper,使用它,你可以切換3種狀態(tài),disabled ,debugging enabled,profiling enabled(下篇詳細(xì)介紹),然后切換到debugging enabled。運(yùn)行該腳本,(去掉URL里的?XDEBUG_TRACE),就可以代碼跟蹤了。
使用xdebug_start_trace()和xdebug_stop_trace()可以手動追蹤你的代碼執(zhí)行情況。
xdebug_start_trace(); //your code required to trace xdebug_stop_trace();
設(shè)定 xdebug.auto_trace = 1 將在執(zhí)行所有 PHP 腳本之前先啟用自動跟蹤。另外,您可以通過代碼設(shè)定 xdebug.auto_trace = 0,并分別使用 xdebug_start_trace() 和 xdebug_stop_trace() 函數(shù)啟用和禁用跟蹤。但是,如果 xdebug.auto_trace 為 1,則可以在包括配置好的 auto_prepend_file 之前先啟動跟蹤。
選項(xiàng) xdebug.trace_ouput_dir 和 xdebug.trace_output_name 用于控制保存跟蹤輸出的位置。在這里,所有文件都被保存到 /tmp/traces 中,并且每個跟蹤文件都以 trace 為開頭,后接 PHP 腳本的名稱(%s)以及進(jìn)程 ID(%p)。所有 Xdebug 跟蹤文件都以 .xt 后綴結(jié)尾。
默認(rèn)情況下,XDebug 將顯示時間、內(nèi)存使用量、函數(shù)名和函數(shù)調(diào)用深度字段。如果將 xdebug.trace_format 設(shè)為 0,則輸出將符合人類閱讀習(xí)慣(將參數(shù)設(shè)為 1 則為機(jī)器可讀格式)。此外,如果指定 xdebug.show_mem_delta = 1,則可以查看內(nèi)存使用量是在增加還是在減少,而如果指定 xdebug.collect_params = 4,則可以查看傳入?yún)?shù)的類型和值。要監(jiān)視每個函數(shù)返回的值,請?jiān)O(shè)定 xdebug.collect_return = 1。
轉(zhuǎn)載隨意,但請帶上本文地址:
http://www.nowamagic.net/librarys/veda/detail/2333