1. 程式人生 > 實用技巧 >php除錯利器 -- xdebug

php除錯利器 -- xdebug

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

之前整理在印象筆記中,現在搬出來。分本地除錯和遠端除錯。本文親測通過並截圖,有問題歡迎留言探討。

(參考網上多位前輩的部落格,整理在筆記裡忘記儲存原文連結,這裡無法貼出連結,望見諒)

# 痛處

一般php專案除錯都用echo, var_dump()之類的函式除錯,專案大的話很不方便,也很低效;

# 預備

安裝xdebug擴充套件;

官網https://xdebug.org/download.php

windows找相應的版本下載即可,linux下在https://xdebug.org/wizard.php這個頁面把 php -i 輸出結果放裡面會告訴你怎麼弄,相當方便; 如下:

1,修改php配置檔案,在最後新增.

zend_extension = "E:/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11-x86_64.dll";

[xdebug]

xdebug.auto_trace=On

xdebug.collect_params=On

xdebug.collect_vars = On ;收集變數

xdebug.collect_return = On ;收集返回值

xdebug.trace_output_dir="e:/wamp/tmp/debuginfo"

xdebug.remote_enable = on

xdebug.remote_handler = dbgp

xdebug.remote_host= localhost ;用於遠端除錯 伺服器的地址

xdebug.remote_connect_back = 1;用於遠端除錯

xdebug.remote_port = 9000

xdebug.idekey = PHPSTORM

xdebug.profiler_enable = on

xdebug.profiler_enable_trigger = off

xdebug.profiler_output_name = cachegrind.out.%t.%p

xdebug.profiler_output_dir = "E:/wamp/tmp/debuginfo"

xdebug.show_local_vars=0

xdebug.show_exception_trace = On ;開啟異常跟蹤

xdebugbug.max_nesting_level = 10000

phpinfo中驗證xdebug擴充套件是否啟用。 服務端配置完成!

2,phpstrom 配置

172113_1rrg_2284562.png

172142_iciV_2284562.png

這部配置的埠意思是 IDE 會在本機監聽9000埠,一般php-fpm也是9000會衝突,這個地方改成別的,對應php配置檔案xdebug那個地方埠也改了。

172307_h1Fs_2284562.png

這個地方配置和配置檔案中的對應起來

在專案右上角debug配置中

根據專案選擇型別如下,網站選擇web application,Name項自定義

server項沒有,點選後面按鈕配置

配置starturl(入口地址)

完成配置如下:

點那個帶電話的圖示,開始監聽,再點蟲子就開啟了除錯,會在上一步我們配置的預設瀏覽器開啟starturl,如下:

在程式碼裡打一個斷點,重新整理一下頁面,除錯視窗會顯示詳細資訊, 上面有操作按鈕,如下:

postman中除錯需要在url上加個引數 XDEBUG_SESSION_START=PHPSTORM

# 優化地方

上面除錯步驟很麻煩,我們都是希望想除錯的時候就除錯,推薦外掛 chrome 外掛 xdebug helper 方便 隨時除錯;也是個臭蟲的圖示,安裝上配置一下,如下:

在需要除錯的頁面啟用外掛

IDE中點亮電話的圖示,啟動監聽,如下:

配置結束,程式碼裡想除錯直接打斷點,完後瀏覽器訪問頁面,執行到斷點IDE就會監聽debug資訊,並把資訊顯示出來;

#xdebug 遠端除錯

有點專案在本地開發很難搭建環境,我們需要在遠端開發和除錯。也就是在本地去除錯遠端開發機上的程式碼。

!0,遠端除錯原理:

左邊是除錯客戶端,比如IDEA、eclipse之類的IDE,右邊是xdebug,執行按照如下步驟進行:

1, IDE監聽一個除錯埠,預設是9000,可以自行配置。

2, 使用者訪問右邊php環境的server,我們這裡使用瀏覽器訪問(隨便在那都行,為方便選擇本地瀏覽器),一般IDE會自動幫我們在正常的url後面增加

XDEBUG_SESSION_START=一個隨機數 的引數。這個引數是用來通知xdebug主動連線IDE的9000埠進行除錯的,沒有這個引數,xdebug不會去主動連線IDE,

除錯也就不會觸發。

3, xdebug主動去連線IDE的9000埠, 連線成功後,除錯開始。

xdebug是如何知道IDE監聽9000埠的呢?

xdebug有兩個配置:remote_host和remote_port,分別代表IDE的ip地址和監聽埠。由此可見,IDE和xdebug必須協商好監聽埠。

埠好辦,但是如果我的ip會變化,那我換一個ip,豈不是要修改下xdebug.remote_host配置嗎?好麻煩!!!

不知道ip沒關係,xdebug可以自己知道,只要設定 xdebug.remote_connect_back 為1就可以了,其執行原理見下圖,實現很簡單,xdebug可以從http請求的頭部獲取ip

地址,之後就用該ip地址作為remote_host來連線。

!1,服務端環境安裝xdebug(方法如上)

最關鍵的兩個設定xdebug.remote_host和xdebug.remote_connect_back,

xdebug.remote_host 要設定成你本機的地址多個用逗號隔開

xdebug.remote_connect_back要設定成1或者on設定完這個會自動忽略remote_host的設定,如果本地是自動獲取ip或者多人的話開啟這個比較好

服務端的配置已完成!

!2,IDE配置

(除錯遠端程式碼一般會和遠端開發同時進行,遠端除錯需要開啟一個本地和遠端的通道,要不接受不到除錯資訊)

> 新建一個遠端的php直譯器

配置正確的話,如下圖:

> 新建專案 或者 把本地已有的專案和遠端的專案對映一下 都行

> 在專案中配置 sftp

再配置mapping

把遠端程式碼下載下來,如下:

來個截圖,好累啊

這個時候看我們開始配置的那個遠端直譯器 之前警告沒了,因為我們配置了mapping

配置debug,步驟同上,不一樣的地方是配置 path mapping

開始除錯了 打斷點 瀏覽器訪問遠端的地址 debug視窗已經有除錯資訊了

忽略我的504 這是別的原因造成的和xdebug沒關係 因為是測試專案懶得管 ~ ~

開發遠端專案我們剛才配置好了sftp,我們本地修改可以通過如下配置自動同步到遠端 我一般選 ctrl + s 那項 按ctrl + s會自動同步到遠端開發機

轉載於:https://my.oschina.net/anyeshe/blog/886784