序言
Xdebug 作為 PHP 除錯工具,提供了豐富的除錯函式和配置,可以直觀的看到 PHP 原始碼的步進和效能資料,以便優化PHP程式碼。
使用 phpstorm + xdebug 來除錯 php 程式是藉助強大的IDE監聽功能, 更方便的除錯程式. 提高我們的編碼效率, 固然 var_dump, print_r 等函式也能提供相應的功能, 但是自動化的工具更能夠事半功倍. 下面我根據自己的使用介紹下如何進行除錯和配置.
, 一種方式是用外部設定的 session, 另外一種是在 phpstorm 中配置頁面入口然後使用內建的監聽來訪問, 原理相同, 下面我們從原理開始講解
除錯原理
配置除錯環境
1) 配置 xdebug
這裡使用了最小化配置, 對於 profile 等功能沒有配置
[xdebug]
zend_extension="/usr/local/opt/php70-xdebug/xdebug.so"
xdebug.remote_enable=1 # 啟用遠端除錯
xdebug.remote_connect_back=1 # 忽略 remote_host 配置, 不關注主機配置, 開發者使用最舒服
xdebug.remote_port=9050 # 監聽埠
複製程式碼
注意 這裡監聽埠預設是 9000 , 和 php 預設監聽重複, 注意儘量不用使用 9000, 以免出現不生效的情況.
2) 設定 phpstorm 配置並開啟監聽
這裡是讓 phpstorm 通過監聽埠的方式獲取到xdebug 斷點傳送過來的資料
2.1) 配置埠
我們這裡監聽的是 9500 埠, 和 xdebug 配置監聽資料埠一致
2.2) 開啟phpstorm 資料監聽
切換 “開始監聽PHP除錯連線” 按鈕。
3) 在 phpstorm 中設定斷點
點選行號右側空白, 設定斷點
4) 設定 debug session
debug session 的工具的目的是設定一個cookie, 讓每次傳送資料的時候都會攜帶這個 cookie, 從而識別監聽.
4.1) 安裝工具
安裝 chrome 擴充套件 Xdebug helper
4.2) 點選 圖示設定session
已經設定了cookie, Key 是 XDEBUG_SESSION
, 值是 PHPSTORM
, 我認為這裡的值無關緊要, 對於 phpstorm 來說, 是能夠監控到的.
5) 執行頁面
這裡我們在斷點位置可以看到輸出的內容專案
另一種方式: 內部呼叫
這裡的另外一種方式的伺服器配置方式和流程完全一致, 就是第四步和第五步有所不同, 實現的原理是在phpstorm中設定執行的伺服器, 然後通過 debug 模式自動設定 XDEBUG_SESSION
, 並且自動開啟監聽.
內部呼叫: 4) 設定 debug session
4.1) 設定 web 訪問的伺服器
例如我這裡的本地域名是 l.dailian.sour-lemon.com
, 我們需要配置一個本地伺服器來開啟這個頁面, 我們首先配置一臺伺服器.
注意 這裡的配置的域名是你本地已經配置好開發環境的域名, 埠號是 本地開發所使用的埠, 我這裡是 l.dailian.sour-lemon.com
和 80
4.2) 配置除錯頁面
我們這裡建立的除錯頁面的型別是 PHP Web Application
, 伺服器選擇的是剛才已經建立好的伺服器
內部呼叫: 5) 執行測試頁面
這樣執行的情況下上面的 2.2) 開啟phpstorm 資料監聽
步驟可以忽略掉, 這裡不需要開啟這個監聽.
5.1) 開始 debug
點選 debug 按鈕, 這裡會自動開啟一個頁面並且傳遞一個唯一的ID(可能是程式 ID)作為 debug 值
開啟的url地址是: http://l.dailian.sour-lemon.com/?XDEBUG_SESSION_START=13608
, 這裡的數值是會變動的.
5.2) 檢視 debug 皮膚
開啟 debug 皮膚, 會看到相對應的監聽 idekey, 這裡和上一步設定的key是一致的, 同樣也和 cookie 中的設定的 XDEBUG_SESSION
值一致
其他幫助
1. 檢視相容性
第一次執行的時候可以通過 phpstorm 自帶的工具來檢查配置的相容性.
Run > Web Server Debug Validation
2. debug 幫助皮膚說明
左側
綠色三角形 : Resume Program
,表示將繼續執行,直到下一個中斷點停止。
紅色方形 : Stop
,表示中斷當前程式除錯。
上方
第一個圖形示 : Step Over
,跳過當前函式。
第二個圖形示 : Step Into
,進入當前函式內部的程式(相當於觀察程式一步一步執行)。
第三個圖形示 : Force Step Into
,強制進入當前函式內部的程式。
第四個圖形示 : Step Out
,跳出當前函式內部的程式。
第五個圖形示 : Run to Cursor
,定位到當前游標。
框架說明 Frames : 載入的檔案列表 Variables : 可以觀察到所有全域性變數、當前區域性變數的數值 Watches : 可以新增變數,觀察變數隨著程式執行的變化。