| 組件 | 版本 | 備註 |
|---|---|---|
| PhpStorm | 2023.2+ | 建議使用最新版,UI 與截圖可能略有差異 |
| PHP | 8.2.x | Thread Safe (TS) / Non-Thread Safe (NTS) 必須與 Xdebug 完全匹配 |
| Xdebug | 3.2.x | 從 3.0 起配置方式大幅簡化,本文以 3.x 為準 |
| Web Server | Nginx / Apache | 本地開發環境 |
php -i 輸出,獲取專屬下載鏈接與安裝指令。php_xdebug-3.2.2-8.2-vs16-x86_64.dll 放入 ext/ 目錄。pecl install xdebug 或包管理器安裝。[Xdebug]
zend_extension="D:/php/ext/php_xdebug.dll"
xdebug.mode = debug,develop,trace
xdebug.start_with_request = yes
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.idekey = PHPSTORM
xdebug.log = "D:/php/logs/xdebug.log"
xdebug.log_level = 7
關鍵點:
• xdebug.mode=debug 啟用調試器(3.x 合併了 remote_enable 等舊參數)。
• start_with_request=yes 讓每個請求自動嘗試連接 IDE,無需瀏覽器插件觸發。
• client_port=9003 為 3.x 預設端口,避開 9000(常被 php-fpm 佔用)。
• xdebug.log 連接失敗時的救命稻草,務必開啟。
php -m | grep xdebug
php -v | grep Xdebug
或瀏覽 phpinfo() 搜尋 "Xdebug",應顯示版本號與配置表。
File → Settings → PHP → CLI Interpreter 選擇本地 PHP 執行檔。
Settings → PHP → Servers 新增:
Locallocalhost (或你的虛擬主機域名如 myapp.test)/var/www/html)Settings → PHP → Debug → Xdebug:
Debug port: 9003(與 xdebug.client_port 一致)
Can accept external connections:勾選
Run → Edit Configurations → + → PHP Web Page:
Debug LocalLocal/index.php 或具體路由電話聽筒圖標 (Start Listening for PHP Debug Connections) 變綠。甲蟲圖標 (Debug 'Debug Local') 或 Shift+F9。Condition 輸入 $user->id === 42,僅特定條件暫停。Suspend,勾選 Log evaluated expression,輸入 "SQL: " . $sql,控制台輸出而不暫停,替代 var_dump。| 現象 | 排查方向 |
|---|---|
| PhpStorm 一直顯示 "Waiting for incoming connection..." | 1. php.ini xdebug.client_port ≠ PhpStorm Debug port2. 防火牆阻擋 9003 3. 路徑映射錯誤導致 IDE 拒絕連接 4. Xdebug log 顯示 "Could not connect to client" |
| 斷點不生效、直接跑完 | 1. 代碼未執行到該行(路由錯誤、快取) 2. xdebug.mode 未包含 debug3. Opcache 優化移除了行號,關閉 opcache.enable_cli=0 |
| 變量顯示 "Cannot evaluate expression" | 變量超出作用域、或被 Opcache 優化消除,嘗試 ini_set('opcache.optimization_level', 0) |
嚴禁在生產環境開啟 xdebug.mode=debug。會嚴重拖慢效能、暴露堆疊資訊、佔用連接埠。生產環境僅保留 xdebug.mode=develop(提供增強錯誤頁面)或完全關閉。
PhpStorm + Xdebug 3.x 的調試鏈路已極度流暢:Wizard 獲取專屬 DLL → php.ini 三行核心配置 → PhpStorm 伺服器映射 → 斷點 + 電話圖標 + 甲蟲圖標。掌握條件斷點與 Logpoints,即可告別 var_dump/die 時代,進入專業調試新境界。