php除錯利器 -- xdebug
之前整理在印象筆記中,現在搬出來。分本地除錯和遠端除錯。本文親測通過並截圖,有問題歡迎留言探討。
(參考網上多位前輩的部落格,整理在筆記裡忘記儲存原文連結,這裡無法貼出連結,望見諒)
# 痛處
一般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 配置
這部配置的埠意思是 IDE 會在本機監聽9000埠,一般php-fpm也是9000會衝突,這個地方改成別的,對應php配置檔案xdebug那個地方埠也改了。
這個地方配置和配置檔案中的對應起來
在專案右上角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