日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Xdebug的安装-(无错可执行版)

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xdebug的安装-(无错可执行版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

xdebug是一個開源的php調試器,以php模塊的形式加載并被使用。可以用來跟蹤,調試和分析PHP程序的運行狀況.

這里以PHP5.2.13為例,

1.下載php_xdebug-2.1.0-5.2.dll文件,

http://www.xdebug.org/download.php

選擇:PHP 5.2 VC6 TS (32 bit)

選擇VC6還是VC9?

標明 MSVC9 (Visual C++ 2008) 的是VC9
如果你在apache1或者apache2下使用PHP,你應該選擇VC6的版本
如果你在IIS下使用PHP應該選擇VC9的版本
VC6的版本使用visual studio6編譯
VC9使用Visual Studio 2008編譯,并且改進了性能和穩定性。VC9版本的PHP需要你安裝Microsoft 2008 C++ Runtime
不要在apache下使用VC9的版本

2.把文件重命名php_xdebug.dll.然后放在php的安裝目錄下的ext目錄下.

3.修改php.ini文件

在文件中加入一下代碼

[Xdebug]
zend_extension_ts = "c:/php/ext/php_xdebug-2.1.2-5.2-vc6.dll"

xdebug.collect_params=On
xdebug.collect_return=On
xdebug.trace_output_dir="F:\phpweb\xdebug" //設定函數調用監測信息的輸出文件的路徑。
xdebug.profiler_enable=On? //打開效能監測器。
xdebug.profiler_output_dir="F:\phpweb\xdebug" //設定效能監測信息輸出文件的路徑。

?

4.重啟Apache

?

5.測試,建一個test.php

內容為<?php? phpinfo();?>

?

如果輸出的內容中有看到xdebug,說明安裝配置成功。

?

這個時候注釋phpinfo();

寫上如下代碼故意引發異常:

      <?php
require_once("abc.php");
?>


重新刷新網頁:

然后通過瀏覽器訪問,我們驚奇地發現,出錯信息變成了彩色的了:

不過除了樣式改變,和我們平時打印的出錯信息內容沒什么不同,意義不大。好,我們繼續改寫程序:

<?php
testXdebug();
function testXdebug() {require_once('abc.php');
}
?>


重新刷新網頁:


發現了什么? Xdebug跟蹤代碼的執行,找到了出錯的函數testXdebug()。
我們把代碼再寫得復雜一些:

<?php
testXdebug();
function testXdebug() {requireFile();
}
function requireFile() {require_once('abc.php');
}
?>


刷新網頁:

Xdebug具有類似于Java的Exception的“跟蹤回溯”的功能,可以根據程序的執行一步步跟蹤到出錯的具體位置,哪怕程序中的調用很復雜,我們也可以通過這個功能來理清代碼關系,迅速定位,快速排錯。

擴充閱讀:

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在錯環境中所產生的堆棧轉儲還將顯示所有局部變量,包括尚未初始化的變量在最上面。要注意的是這將產生大量的信息,也因此默認情況下是關閉的。

第三部分:分析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函數debug_backtrace()也有類似的功能,但是要注意debug_backtrace()函數只在PHP4.3.0之后版本及
PHP5中才生效。這個函數是PHP開發團隊在PHP5中新增的函數,然后又反向移植到PHP4.3中。
Xdebug使調試信息更加美觀
Xdebug擴展加載后,Xdebug會對原有的某些PHP函數進行覆寫,以便好更好地進行Debug。比如var_dump()函數,我們知道通常我們 需要在函數前后加上”<pre>…</pre>”才能夠讓輸出的變量信息比較美觀、可讀性好。但是加載了Xdebug后,我們不 再需要這樣做了,Xdebug不但自動給我們加上了<pre>標簽,還給變量加上顏色。
例:
<?php
$arrTest=array(
? ?? ? "test"=>"abc",
? ?? ? "test2"=>"abc2"
);
var_dump($arrTest);
?>
輸出:

看到了嗎? 數組元素的值自動顯示顏色。
如果你還是希望使用PHP的var_dump函數 只要在php.ini關于xdebug的配置中加上 xdebug.overload_var_dump = Off 即可
Xdebug測試腳本執行時間
測試某段腳本的執行時間,通常我們都需要用到microtime()函數來確定當前時間。例如PHP手冊上的例子:
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
? ? list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
// Sleep for a while
usleep(100);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Did nothing in $time seconds\n";
?>
但是microtime()返回的值是微秒數及絕對時間戳(例如“0.03520000 1153122275”),沒有可讀性。所以如上程序,我們需要另外寫一個函數microtime_float(),來將兩者相加。
Xdebug自帶了一個函數xdebug_time_index()來顯示時間。

PHP腳本占用的內存
有時候我們想知道程序執行到某個特定階段時到底占用了多大內存,為此PHP提供了函數memory_get_usage()。這個函數只有當PHP編譯時使用了--enable-memory-limit參數時才有效。 
Xdebug同樣提供了一個函數xdebug_memory_usage()來實現這樣的功能,另外xdebug還提供了一個xdebug_peak_memory_usage()函數來查看內存占用的峰值。


WinCacheGrind
有時候代碼沒有明顯的編寫錯誤,沒有顯示任何錯誤信息(如error、warning、notice等),但是這不表明代碼就是正確無誤的。有時候可能某 段代碼執行時間過長,占用內存過多以致于影響整個系統的效率,我們沒有辦法直接看出來是哪部份代碼出了問題。這時候我們希望把代碼的每個階段的運行情況都 監控起來,寫到日志文件中去,運行一段時間后再進行分析,找到問題所在。
回憶一下,之前我們編輯php.ini文件
加入
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="I:\Projects\xdebug"
xdebug.profiler_output_dir="I:\Projects\xdebug"
這幾行,目的就在于把執行情況的分析文件寫入到”I:\Projects\xdebug”目錄中去(你可以替換成任何你想設定的目錄)。如果你執行某段程 序后,再打開相應的目錄,可以發現生成了一堆文件,例如cachegrind.out.1169585776這種格式命名的文件。這些就是Xdebug生 成的分析文件。用編輯器打開你可以看到很多程序運行的相關細節信息,不過很顯然這樣看太累了,我們需要用圖形化的軟件來查看。
WinCacheGrind下載
在Windows平臺下,可以用WinCacheGrind(wincachegrind.souceforge.net)這個軟件來打開這些文件。可以直觀漂亮地顯示其中內容:

WinCacheGrind小結:
Xdebug提供了各種自帶的函數,并對已有的某些PHP函數進行覆寫,可以方便地用于調試排錯;Xdebug還可以跟蹤程序的運行,通過對日志文件的分析,我們可以迅速找到程序運行的瓶頸所在,提高程序效率,從而提高整個系統的性能。

總結

以上是生活随笔為你收集整理的Xdebug的安装-(无错可执行版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。