本地開發環境搭建
1. PHP 安裝 (Windows)
- 下載:
windows.php.net/download → VC15 x64 Thread Safe (現代版本)
- 解壓至
D:\php
- 複製
php.ini-development → php.ini
- 啟用擴展:
extension=pdo_mysql, extension=mysqli, extension=xdebug
- 設置
extension_dir = "ext"
- 配置環境變量 PATH 添加 PHP 目錄
2. Apache 整合
# httpd.conf
LoadModule php_module "D:/php/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "D:/php"
調試工具鏈選型
| 工具 | 類型 | 特點 | 適用場景 |
| Xdebug 3 | 調試擴展 | 斷點、堆棧、變量檢查、性能分析、代碼覆蓋率 | 所有 PHP 開發必裝 |
| PhpStorm | IDE | 零配置 Xdebug、智能提示、重構、測試運行、數據庫工具 | 專業首選(付費) |
| VS Code + PHP Debug | 編輯器+插件 | 輕量、免費、Xdebug 適配良好、Git 整合 | 現代主流選擇 |
| PhpED | IDE | 老牌、內置調試器、代碼檢查 | 歷史項目維護 |
| NuSphere PhpED | 商業 IDE | 專業調試、性能分析器 | 企業級 |
| 瀏覽器開發者工具 | 前端調試 | Network、Console、Sources、Vue/React DevTools | 前後端聯調 |
Xdebug 3 核心配置
; php.ini
[xdebug]
zend_extension = xdebug
xdebug.mode = debug,develop,trace,profile
xdebug.start_with_request = yes
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.idekey = VSCODE
xdebug.log = "D:/php/xdebug.log"
xdebug.discover_client_host = true
關鍵模式說明
debug:斷點調試
develop:增強 var_dump、錯誤堆棧
trace:函數調用跟踪文件
profile:性能分析 (CacheGrind 格式)
IDE 零配置調試
VS Code (推薦)
- 安裝 PHP Debug 擴展
- 創建
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
}
}
]
}
- 按 F5 開始監聽
- 瀏覽器安裝 Xdebug Helper 擴展,設置 IDE Key =
VSCODE
- 設置斷點,訪問頁面,命中斷點進入調試
PhpStorm
Settings → PHP → Debug → Xdebug 端口 9003
Settings → PHP → Servers 添加項目映射
- 工具欄電話圖標「Start Listening for PHP Debug Connections」
- 瀏覽器 Xdebug Helper 設置 IDE Key =
PHPSTORM
常用調試技巧
- 條件斷點:右鍵斷點 → Condition →
$user->id === 100
- 日志點:不暫停,輸出表達式值到控制台
- 計算表達式:調試控制台即時執行代碼
- 變量監視:Watch 面板添加
$this->request->post()
- 調用堆棧:查看完整調用鏈,跳轉到任意幀
- 異常斷點:捕獲 Uncaught Exception/Error 自動暫停
生產環境調試替代方案
- 日志系統:Monolog + ELK/EFK,結構化日志、關鍵字搜索
- APM 監控:SkyWalking、Pinpoint、DataDog、NewRelic,分布式追蹤、性能指標
- 錯誤追蹤:Sentry、Rollbar,異常聚合、告警、源碼映射
- 臨時腳本:
file_put_contents('debug.log', print_r($var, true)) 只讀環境應急
避坑指南
| 問題 | 原因 | 解決 |
| 斷點不生效 | 路徑映射錯誤、Xdebug 未加載、端口衝突 | 檢查 phpinfo() xdebug 段、launch.json pathMappings、netstat -an | findstr 9003 |
| 變量顯示截斷 | Xdebug 默認限制 | xdebug.var_display_max_depth=10, xdebug.var_display_max_children=256, xdebug.var_display_max_data=1024 |
| 性能極慢 | xdebug.mode 包含 profile/trace、或遠程調試延遲 | 開發機調試關閉 profile/trace、本地調試優於遠程 |
| 無法調試 CLI 腳本 | 未配置 CLI php.ini | php -i | grep xdebug 確認、同步配置 cli/php.ini |
「調試是工程師的顯微鏡」,投資完善工具鏈,回報是指數級的問題定位效率提升。