使用Xdebug進行遠程調試

爲何要用?

  1. 方便聯調:
    和客戶端一塊兒聯調,是die(); exit(); 會影響其餘人員是使用。
  2. 關注數據變化:
    正常狀況下,咱們在調試和開發時,更關注數據的變化。頻繁斷點、效率比較低。
  3. 簡單:
    以前的開發本身比較懶,一直沒用,用起來發現很簡單。

原理

運行xdebug須要客戶端IDE(phpstorm)、遠程服務器配合,首先是客戶端配置好端口,發送debug請求,請求會經過瀏覽器或者IDE的http請求,攜帶特定的參數發送到服務端,服務端收到請求後,發現這是一個xdebug請求,則與IDE創建dpgp鏈接,當遇到斷點時候,返回調試信息給IDEphp

image | left

  • 服務器的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響應

流程

7c8bad15595a7ed97230e075124cb9ff.png | center | 827x436

1. 安裝xdebug擴展

https://xdebug.org/download.phphtml

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

v2-169647ab9bc2bf755f572ef4b0ff4116_hd.jpg | center | 720x641

4. Phpstorm Debug配置

企業微信截圖_153663027822.png | center | 827x571

5. 開啓phpstorm 數據監聽

企業微信截圖_15366307559249.png | center | 446x79

6. 設置 debug session

debug session 的工具的目的是設置一個cookie, 讓每次發送數據的時候都會攜帶這個 cookie, 從而識別監聽.git

6.1) 安裝工具
https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaocgithub

6.2) 點擊圖標設置web

企業微信截圖_15366310693718.png | center | 202x226

6.3) 已經設置了cookie, Key 是 XDEBUG_SESSION, 值是 PHPSTORMchrome

企業微信截圖_153663027822.png | center | 824x446

7. 運行頁面

企業微信截圖_15365753413668.png | center | 622x234

其餘調試方式

上面的模式有個缺點,插件是針對於一個標籤頁
快捷鍵:
Mac: Ctrl+Shift+X Windows:Alt+Shift+Xsegmentfault

內部模式

1. 設置 web 訪問的服務器

企業微信截圖_15366324012641.png | center | 827x571

2. 配置調試頁面

咱們這裏建立的調試頁面的類型是PHP Web Page, 服務器選擇的是剛纔已經創建好的服務器瀏覽器

企業微信截圖_15366324012641.png | center | 827x554

3. 運行測試頁面

企業微信截圖_15366324012641.png | center | 287x97

自動生成:XDEBUG_SESSION_START
http://example.com/?XDEBUG_SESSION_START=13608服務器

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

多人開發模式

https://derickrethans.nl/debugging-with-multiple-users.html
插件下載地址:http://code.activestate.com/komodo/remotedebugging/微信

其餘

1. 查看兼容性

第一次運行的時候能夠經過 phpstorm 自帶的工具來檢查配置的兼容性.
Run > Web Server Debug Validation
校驗代碼
https://gist.github.com/han8g...

2. debug 幫助面板說明

2cd9bf236c0d2ef6f143943fe82c240a.png | center | 827x201

左側
綠色三角形 : Resume Program,表示將繼續執行,直到下一個中斷點中止。
紅色方形 : Stop,表示中斷當前程序調試。

上方
第一個圖形示 : Step Over,跳過當前函數。
第二個圖形示 : Step Into,進入當前函數內部的程序(至關於觀察程序一步一步執行)。
第三個圖形示 : Force Step Into,強制進入當前函數內部的程序。
第四個圖形示 : Step Out,跳出當前函數內部的程式。
第五個圖形示 : Run to Cursor,定位到當前光標。

參考文章

http://www.javashuo.com/article/p-odkqmoip-d.html

相關文章
相關標籤/搜索