PhpStorm—— Xdebug斷點調試

很多人xdebug安裝失敗是因為版本不對。

查找適合的版本

進入網站https://xdebug.org/ 選擇download選項,點擊下圖位置

image.png

復制phpinfo.php的源碼到方框位置分析,會得到適合你PHP版本的xdebug,下載xdebug文件放到擴展目錄,并修改php.ini文件。
image.png

image.png

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
QQ截圖20180118204833.png
  • 在DBGp Proxy中配置你的idekey,idekey就是你在php.ini配置文件中的idekey,host是你的服務器ip或者是已經可以解析的域名,port可以自選。

3、配置server

  1. 首先打開phpstorm軟件,在右上角找到這個紅色區域,


    1103990-20170212101349791-2381445.png
  2. 然后點擊下拉按鈕,選擇Edit Configurations,出現以下彈窗,從左側Defaults下拉選項中點擊選中PHP Web Application,


    1103990-20170212102034447-456671965.png
  3. 然后編輯域名等信息:


    1103990-20170212102530385-468529894.png
  4. 完成后可以看到下面的界面:


    1103990-20170212115845104-404727626.png
  5. 點擊OK,于是在PhpStorm的右上角可以看到發生了變化:


    1103990-20170212103054135-1070229441.png
  6. 接下來,可以點擊那個綠色的蟲子進行調試,在這之前,需要在代碼編輯區中添加斷點,


    1103990-20170212103334479-418831525.png
  7. 添加完斷點,點擊那只綠色的肥蟲之后,就會自動打開并跳轉到瀏覽器,


    1103990-20170212103519026-120333512.png
  8. 并且可以看到PhpStorm有情況提示,這是執行到了斷點啦,


    1103990-20170212103700072-1440261197.png
  9. 值得一提的是,在PhpStorm軟件的下方控制臺這里,包含一些很有用的調試信息:


    1103990-20170212104030651-1210827446.png
  10. 具體調試有兩個地方特別重要,故單獨截圖出來,


    1103990-20170212104342557-1483639426.png

    QQ截圖20180119163851.png

Xdebug的調試的確很簡單,但是也十分強大,尤其是其變量的實時監控功能,可以讓我們看到想要觀察的變量或數據。

接下來看看如何使用斷點調試,方法主要有兩種。

1)主動開啟PhpStorm對調試端口的監聽


459873-20161226140622929-698058395.png

在工具欄上找到如圖所示的按鈕,點一下就開啟了。

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的參數,接下來一個小時內都不需要再加這個參數。如果想要停止調試,只要把調試端口監聽關閉即可:

459873-20161226142258945-66874142.png

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
    執行到下一個斷點處

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。