一.爲自己的php版本選擇正確的xdebug版本
首先要得到虛擬機運行環境的phpinfo()信息,我是這樣做的
在瀏覽器訪問給虛擬機配的域名
把phpinfo() 頁面的內容Ctrl+A全部選中,Ctrl+C複製,
打開https://xdebug.org/wizard.php
粘貼到該網址的頁面的一個空白輸入框,點擊底下的按鈕
成功會出現以下頁面信息:
上面給出安裝xdebug的9個操作步驟,下面我會根據實際情況和遇到的問題進行講解
二.安裝xdebug
第一步 :點擊下載這個壓縮包xdebug-2.6.0alpha1.tgz
下載完我們要把它放到虛擬機裏面去解壓,我自己是放到/tmp目錄裏面的
執行sudo –i 獲取更高的權限
第二步:解壓命令:tar -xvzf xdebug-2.6.0alpha1.tgz
第三步:進入解壓之後的文件夾 cd xdebug-2.6.0alpha1
第四步:執行phpize 命令
phpize是屬於php-devel 中的東西,主要是設定php 外掛模組的一些設定
第五步:執行 ./configure命令
執行結果的最後一行如果出現這個
出現這個錯誤說明你執行./configure 時 --with-php-config 這個參數配置路徑錯誤導致的。執行以下命令找到php-config的路徑
重新執行命令:
./configure --with-php-config=/data/server/php/bin/php-config
第六步:執行make 命令
第七步:把xdebug.so複製到指定目錄下
我們可以看到當前目錄下會有modules這個目錄
執行命令:cp xdebug.so /data/server/php/lib/php/extensions/no-debug-non-zts-20160303
第八步:vim /data/server/php/etc/php.ini
命令模式下按快捷鍵大寫G跳到文件末尾,插入以下內容(可粘貼到xshell裏面去)
zend_extension=/data/server/php/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
xdebug.remote_enable = 1 #開啓遠程調試
xdebug.remote_connect_back = 1 #如果配置該項就不需要配xdebug.remote_host
xdebug.remote_port = 9001 #遠程調試端口
xdebug.idekey = "PHPSTORM" #調試器的關鍵字
xdebug.remote_autostart = 1 #遠程調試自動啓動
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
第九步:重啓服務器 ,例如nginx 根據你實際情況來定)
三 配置phpstorm
點擊箭頭指向的地方,添加php解釋器,我們用的是PHP7.1.5
點擊左上角的+ ,選擇Remote
在PHP->Debug->DBGpProxy設置如下
在PHP->Servers中設置映射路徑
點擊+, 建立起相應的的目錄映射
四.安裝 xdebug helper
Xdebug工作原理
IDE(如PhpStorm)已經集成了一個遵循DBGP的Xdebug插件,當開啓它的時候,會在本地開一個Xdebug調試服務,監聽在調試器中所設置的端口上,默認是9000,這個服務就會監聽所有到9000端口的鏈接。在PhpStorm中,位於:工具欄 > Run > Start / Stop Listening for PHP XdebugConnetions。
當瀏覽器發送一個帶 XDEBUG_SESSION_START 的參數的請求到服務器時,服務器接受後將其轉到後端的php處理,如果php開啓了xdebug模塊,則會將debug信息轉發到客戶端IP的IDE的調試端口上。當參數或者cookie信息中不帶 XDEBUG_SESSION_START,則不會啓動調試。這就爲後續在瀏覽器中添加開關提供了可能。Xdebug的官方給出了一個示例圖:很好的展示了相互調用關係。這個示例圖是綁定了ip,即使用了固定ip地址,xdebug.remote_connect_back= 0 ,也是Xdebug 的默認方式,這種情況下,Xdebug 在收到調試通知時會讀取配置 xdebug.remote_host 和 xdebug.remote_port ,默認是 localhost:9000,然後向這個端口發送通知,這種方式只適合單一客戶端開發調試。我們這裏配置xdebug.remote_conncet_back=1,可接受多客戶端開發調試。
xdebughelper是一款chrome插件,和phpstorm、eclipse、netbeans等IDE協同工作方便調試。這個安裝很簡單,到谷歌商店()直接安裝,或者百度一下。安裝好後,在選項裏設置IDE爲phpstorm就可以了。
五.調試
1.啓動xdebug helper:點擊xdebug helper圖標,選擇Debug項,灰色圖標變成綠色
2. .在phpstorm中將需要調試的代碼打上斷點(在行號旁邊點擊一下即可),點擊右上角電話圖標開啓調試監聽,由一頭綠一頭紅變成兩頭綠即可
3.用瀏覽器或者postman訪問地址的時候,在phpstorm的debugger窗口可以看到調試信息。Debugger窗口上方的的這些箭頭就是斷點執行的按鈕(如果斷點執行完畢則重新訪問,再次斷點調試)
把鼠標放到這些按鈕上面會出現使用提示
Step Into:單步執行,遇到子函數就進入並且繼續單步執行(簡而言之,進入子函數);
Step Over:在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完再停止,也就是把子函數整個作爲一步。有一點,經過我們簡單的調試,在不存在子函數的情況下是和Step Into效果一樣的(簡而言之,越過子函數,但子函數會執行)。
Step Out:當單步執行到子函數內時,用Step Out就可以執行完子函數餘下部分,並返回到上一層函數。