Vagrant+PHPStorm+XDebug斷點調試

一.爲自己的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)已經集成了一個遵循DBGPXdebug插件,當開啓它的時候,會在本地開一個Xdebug調試服務,監聽在調試器中所設置的端口上,默認是9000,這個服務就會監聽所有到9000端口的鏈接。在PhpStorm中,位於:工具欄 > Run > Start / Stop Listening for PHP XdebugConnetions

當瀏覽器發送一個帶 XDEBUG_SESSION_START 的參數的請求到服務器時,服務器接受後將其轉到後端的php處理,如果php開啓了xdebug模塊,則會將debug信息轉發到客戶端IPIDE的調試端口上。當參數或者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插件,和phpstormeclipsenetbeansIDE協同工作方便調試。這個安裝很簡單,到谷歌商店()直接安裝,或者百度一下。安裝好後,在選項裏設置IDEphpstorm就可以了。

 

 

 

五.調試

1.啓動xdebug helper:點擊xdebug helper圖標,選擇Debug項,灰色圖標變成綠色

 

2. .phpstorm中將需要調試的代碼打上斷點(在行號旁邊點擊一下即可),點擊右上角電話圖標開啓調試監聽,由一頭綠一頭紅變成兩頭綠即可

 

 

3.用瀏覽器或者postman訪問地址的時候,在phpstormdebugger窗口可以看到調試信息。Debugger窗口上方的的這些箭頭就是斷點執行的按鈕(如果斷點執行完畢則重新訪問,再次斷點調試)

 

 

把鼠標放到這些按鈕上面會出現使用提示

 

 

 

Step Into:單步執行,遇到子函數就進入並且繼續單步執行(簡而言之,進入子函數);

Step Over:在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完再停止,也就是把子函數整個作爲一步。有一點,經過我們簡單的調試,在不存在子函數的情況下是和Step Into效果一樣的(簡而言之,越過子函數,但子函數會執行)。

 

Step Out:當單步執行到子函數內時,用Step Out就可以執行完子函數餘下部分,並返回到上一層函數。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章