很多人xdebug安裝失敗是因為版本不對。
查找適合的版本
進入網站https://xdebug.org/ 選擇download選項,點擊下圖位置
復制phpinfo.php的源碼到方框位置分析,會得到適合你PHP版本的xdebug,下載xdebug文件放到擴展目錄,并修改php.ini文件。
1、在php.ini中加入配置:[這里只列入關鍵配置]
#開啟遠程調試
xdebug.remote_enable = 1
#配置調試連接通信使用的協議,這行不配置也沒關系,默認值就是dbgp。dbgp跟http一樣,是一種通信協議
xdebug.remote_handler = "dbgp"
#配置進行調試的主機地址;
xdebug.remote_host = "127.0.0.1"
#這個端口不占用phpfpm 的9000,換用另一個,一定要和上面phpstrom配置中的端口一致
#配置進行調試的主機上面會監聽的端口;
xdebug.remote_port=9001
xdebug.idekey=PhpStorm
#加載xdebug的擴展,路徑需根據自己的環境修改。
zend_extension="D:\phpStudy\php\php-5.6.27-nts\ext\php_xdebug.dll"
2、phpstorm的xdebug配置
-
在文件->設置->語言與框架中->PHP->debug 設置端口,端口默認為9000,由于經常會被其他程序占用,建議設置為9001
debug port要和php.ini里面的xdebug.remote_port相一致!
image.png
- 在DBGp Proxy中配置你的idekey,idekey就是你在php.ini配置文件中的idekey,host是你的服務器ip或者是已經可以解析的域名,port可以自選。
3、配置server
-
首先打開phpstorm軟件,在右上角找到這個紅色區域,
1103990-20170212101349791-2381445.png -
然后點擊下拉按鈕,選擇Edit Configurations,出現以下彈窗,從左側Defaults下拉選項中點擊選中PHP Web Application,
1103990-20170212102034447-456671965.png -
然后編輯域名等信息:
1103990-20170212102530385-468529894.png -
完成后可以看到下面的界面:
1103990-20170212115845104-404727626.png -
點擊OK,于是在PhpStorm的右上角可以看到發生了變化:
1103990-20170212103054135-1070229441.png -
接下來,可以點擊那個綠色的蟲子進行調試,在這之前,需要在代碼編輯區中添加斷點,
1103990-20170212103334479-418831525.png -
添加完斷點,點擊那只綠色的肥蟲之后,就會自動打開并跳轉到瀏覽器,
1103990-20170212103519026-120333512.png -
并且可以看到PhpStorm有情況提示,這是執行到了斷點啦,
1103990-20170212103700072-1440261197.png -
值得一提的是,在PhpStorm軟件的下方控制臺這里,包含一些很有用的調試信息:
1103990-20170212104030651-1210827446.png -
具體調試有兩個地方特別重要,故單獨截圖出來,
1103990-20170212104342557-1483639426.png
QQ截圖20180119163851.png
Xdebug的調試的確很簡單,但是也十分強大,尤其是其變量的實時監控功能,可以讓我們看到想要觀察的變量或數據。
接下來看看如何使用斷點調試,方法主要有兩種。
1)主動開啟PhpStorm對調試端口的監聽
在工具欄上找到如圖所示的按鈕,點一下就開啟了。
2)找到合適的代碼位置打斷點
3)訪問對應的請求,并在請求地址后面添加XDEBUG_SESSION_START的參數,
http://www.tp5wechat.com/api/v1/token/user?XDEBUG_SESSION_START=19938
訪問后就會進入斷點.
這個方法中:
第一步的目的是為了讓PhpStorm開啟對xdebug.remote_port端口的監聽,以便接收到xdebug發出的調試請求。
第三步XDEBUG_SESSION_START參數的值可以隨意寫,它的作用在于開啟一個http的調試會話。這個會話類似平常的登錄會話一樣,xdebug會把這個值寫到cookie里面去:
只要在http(get或者post)請求中包含XDEBUG_SESSION_START參數或者XDEBUG_SESSION這個cookie中,這個請求就會嘗試進入調試環境。只需要在第一次請求調試的時候加上XDEBUG_SESSION_START的參數,接下來一個小時內都不需要再加這個參數。如果想要停止調試,只要把調試端口監聽關閉即可:
xdebug進行斷點調試的關鍵在于:xdebug在識別到一個請求需調試的時候,就會用dbgp的協議向remote_host跟remote_port這個地址發送調試請求,當一個位于remote_host上的IDE如PhpStorm正好在監聽remote_port這個端口的調試請求時,就能成功接收到調試信息進行調試。
調試快捷鍵
F7 通過當前行,進入下一行,如果該行是方法,則進入方法體
F8 通過當前行,進入下一行,如果該行是方法,也直接進入下一行,不進入方法體
-
F9 通過整個流程,全部順序執行
image.png 第一個按鈕:step over 步越
執行當前函數的下一步,如果有子函數,也不會進入,會一直執行到函數結束第二個按鈕:step into 步入
執行當前函數的下一步,如果有子函數,會從頭到尾執行子函數,還原了程序執行的最詳細的路線,從構造函數到結尾的每一步都會跳到。第三個按鈕:force step into
與step into 相同,執行當前函數的下一步,如果有子函數也會進入子函數,只不過不會從頭到尾的還原函數執行的路線,會直接跳到子函數內第一步,構造函數等一些前置方法會忽略第四個按鈕:step out 步出
跳出當前執行的函數,跳到父函數的下一步。第五個按鈕:run to cursor
執行到下一個斷點處