之前整理在印象筆記中,現在搬出來。分本地調試和遠端調試。本文親測通過並截圖,有問題歡迎留言探討。
(參考網上多位前輩的博客,整理在筆記裡忘記保存原文鏈接,這裡無法貼出鏈接,望見諒)
# 痛處
一般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埠
在專案右上角debug配置中
依專案選擇類型如下,網站選擇web application,Name項目自訂
server項目沒有,點選後面按鈕配置
設定starturl(入口位址)
完成設定如下:
點那個蟲子就開啟了調試,會在上一步我們配置的預設瀏覽器打開starturl,如下:
在程式碼裡打一個斷點,刷新一下頁面,調試視窗會顯示詳細信息, 上面有操作按鈕,如下:
# 最佳化地方
上面調試步驟很麻煩,我們都是希望想調試的時候就調試,推薦插件 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
配置debug,步驟同上,不一樣的地方是配置 path mapping
開始調試了 打斷點 瀏覽器訪問遠端的地址 debug窗口已經有調試信息了
忽略我的504 這是別的原因造成的和xdebug沒關係 因為是測試項目懶得管 ~ ~
開發遠端專案我們剛剛配置好了sftp,我們本地修改可以透過以下設定自動同步到遠端 我一般選 ctrl + s 那項 按ctrl + s會自動同步到遠端開發機