Xdebug+PhpStorm 遠端除錯

滾雪球的哈士奇發表於2018-11-30

開發環境:

本地 Windows10 日常開發使用的環境 裝有PHPStorm 

遠端主機 Linux  伺服器 裝php-fpm/nginx等所有開發依賴環境

本地可以訪問遠端主機 但遠端主機無法訪問本地 
複製程式碼

目的

遠端除錯(remote debug)在windows本地環境下 除錯遠端伺服器(Linux)上的程式碼
複製程式碼

問題

之前一直認為 php-xdebug 的擴充套件的remote_debug 只能夠支援本地環境下除錯

其實原因是沒有準備好除錯環境  (遠端的伺服器上無法訪問到本地的除錯埠 需要通過ssh隧道埠對映 建立連線)

其client 和 server 的對應關係如下圖 
複製程式碼

xdebug client 和 server 的對應關係如下圖

本地的PHPSTORM 在開啟斷點服務後 會開啟一個的除錯服務 (預設埠為 9000)

用於與伺服器進通過DBGP行通訊

但本地環境是處於區域網內 伺服器無法通過IP 直接訪問IDE的除錯埠

步驟

1. 遠端主機上安裝 php_xdebug 擴充套件

2. 修改配置檔案php.ini 並重啟php-fpm

phpinfo資訊

[xdebug]

zend_extension=/webser/soft/php72/lib/php/extensions/xdebug.so

xdebug.remote_enable=1

xdebug.remote_port=9001

xdebug.remote_host=127.0.0.1

xdebug.remote_log=/var/log/php-xdebug.log

xdebug.idekey="PHPSTORM"

然後檢視phpinfo資訊 檢查配置是否生效

3. 本地與遠端主機建立ssh隧道>埠轉移 使遠端主機能夠訪問到IDE的9001埠

Xdebug+PhpStorm 遠端除錯

Xdebug+PhpStorm 遠端除錯

遠端主機上鍵入telnet命令# telnet 127.0.0.1 9001 檢查是否能夠訪問9001 埠

(這裡因為埠衝突 預設9000 改為9001 php.ini 與 PHPSTORM配置 保持一致)

4. PHPSTORM debug配置

Xdebug+PhpStorm 遠端除錯

Xdebug+PhpStorm 遠端除錯

新增Server 並配置IDE KEY (需與php.ini 中保持一致)

Xdebug+PhpStorm 遠端除錯

最後點選綠色的甲蟲和電話筒 開啟除錯 並打上斷點

Xdebug+PhpStorm 遠端除錯

Run (執行) > Break at first line in PHP scripts 設定php斷點在指令碼第一行

5. 安裝xdebug_helper 或者 在請求中攜帶 IDEKey 即可觸發除錯

擴充套件: 當我們在需要再命令列模式中啟用xdebug 時 可以通過以下方式 配置session_key

## When running the script from the command line 
## you need to set an environment variable, like:
Linux 環境中:
export XDEBUG_CONFIG="idekey=session_name"
php myscript.php

Windows 環境中:
set XDEBUG_CONFIG="idekey=session_name"
複製程式碼

相關文章