為什麼要用?
- 方便聯調:
和客戶端一起聯調,是die(); exit(); 會影響其他人員是使用。 - 關注資料變化:
正常情況下,我們在除錯和開發時,更關注資料的變化。頻繁斷點、效率比較低。 - 簡單:
之前的開發自己比較懶,一直沒用,用起來發現很簡單。原理
執行xdebug需要客戶端IDE(phpstorm)、遠端伺服器配合,首先是客戶端配置好埠,傳送debug請求,請求會通過瀏覽器或者IDE的http請求,攜帶特定的引數傳送到服務端,服務端收到請求後,發現這是一個xdebug請求,則與IDE建立dpgp連線,當遇到斷點時候,返回撥試資訊給IDE
- 伺服器的IP是10.0.1.2,埠80上有HTTP
- IDE位於未知IP上,因此xdebug.remote_connect_back設定為1
- IDE偵聽埠9000,因此xdebug.remote_port設定為9000
- 發出HTTP請求,Xdebug從HTTP頭中檢測IP地址
- Xdebug連線到埠9000上檢測到的IP(10.0.1.42)
- 除錯執行,提供HTTP響應
流程
1. 安裝xdebug擴充套件
2. 遠端環境配置
zend_extension=xdebug.so
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back = 1
//如果開啟此,將忽略下面的 xdebug.remote_host 的引數
xdebug.remote_host=192.168.x.x
//注意這裡是,客戶端的ip<即IDE的機器的ip,不是你的web server>
xdebug.remote_enable=on
xdebug.remote_port = 9001
//注意這裡是,客戶端的埠<即IDE的機器的ip,不是你的web server>
xdebug.remote_handler = dbgp
xdebug.auto_trace = 1
xdebug.remote_log = /tmp/xdebug.log
3. 配置deployment
4. Phpstorm Debug配置
5. 開啟phpstorm 資料監聽
6. 設定 debug session
debug session 的工具的目的是設定一個cookie, 讓每次傳送資料的時候都會攜帶這個 cookie, 從而識別監聽.
6.1) 安裝工具
chrome.google.com/webstore/detail/...
6.2) 點選圖示設定
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ZcbWs6w6-1579154178585)(cdn.nlark.com/yuque/0/2018/png/103... “”)]
6.3) 已經設定了cookie, Key 是 XDEBUG_SESSION
, 值是 PHPSTORM
,
7. 執行頁面
其他除錯方式
上面的模式有個缺點,外掛是針對於一個標籤頁
快捷鍵:
Mac: Ctrl+Shift+X Windows:Alt+Shift+X
內部模式
1. 設定 web 訪問的伺服器
2. 配置除錯頁面
我們這裡建立的除錯頁面的型別是 PHP Web Page
, 伺服器選擇的是剛才已經建立好的伺服器
3. 執行測試頁面
自動生成:XDEBUG_SESSION_START
example.com/?XDEBUG_SESSION_START=1...
Fiddler工具除錯
if (oSession.host == "xxxx")
{
var sCookie = oSession.oRequest["Cookie"] + ';XDEBUG_SESSION=PHPSTORM;';
oSession.oRequest.headers.Add("Cookie", sCookie);
}
命令列
export XDEBUG_CONFIG="idekey=PHPSTORM"
php myscript.php
多人開發模式
derickrethans.nl/debugging-with-mu...
外掛下載地址:code.activestate.com/komodo/remoted...
其他
1. 檢視相容性
第一次執行的時候可以通過 phpstorm 自帶的工具來檢查配置的相容性.Run > Web Server Debug Validation
校驗程式碼
:gist.github.com/han8gui/231ba75c89...
2. debug 幫助皮膚說明
左側
綠色三角形 : Resume Program
,表示將繼續執行,直到下一個中斷點停止。
紅色方形 : Stop
,表示中斷當前程式除錯。
上方
第一個圖形示 : Step Over
,跳過當前函式。
第二個圖形示 : Step Into
,進入當前函式內部的程式(相當於觀察程式一步一步執行)。
第三個圖形示 : Force Step Into
,強制進入當前函式內部的程式。
第四個圖形示 : Step Out
,跳出當前函式內部的程式。
第五個圖形示 : Run to Cursor
,定位到當前游標。
參考文章
segmentfault.com/a/119000001138766...
本作品採用《CC 協議》,轉載必須註明作者和本文連結