傳統 var_dump/echo 除錯屬「事後鑑證」,Xdebug 提供「即時探查」:呼叫堆疊追蹤、變數檢查、條件中斷、效能剖析、覆蓋率統計。
# Ubuntu/Debian sudo apt-get install php-xdebug # 或 pecl pecl install xdebug # php.ini 關鍵設定 zend_extension=xdebug.so xdebug.mode=debug,develop,trace,profile,coverage xdebug.start_with_request=yes xdebug.client_host=127.0.0.1 xdebug.client_port=9003 xdebug.idekey=VSCODE xdebug.log=/var/log/xdebug.log
xdebug.client_host 設為 IDE 所在 IPxdebug.mode=trace xdebug.trace_output_dir=/tmp/xdebug xdebug.trace_format=1 # 0=人類可讀, 1=電腦可解析 xdebug.collect_params=4 # 0-4 參數詳盡度 xdebug.collect_return=1 xdebug.collect_assignments=1
產生 trace.xt 檔案,可用 kcachegrind/qcachegrind 視覺化分析呼叫關係、耗時、記憶體。
xdebug.mode=profile xdebug.profiler_output_dir=/tmp/xdebug xdebug.profiler_output_name=cachegrind.out.%p
產生 cachegrind.out.*,同樣用 KCacheGrind/QCacheGrind 分析:函數耗時、呼叫次數、記憶體分配、熱點路徑。
xdebug.mode=coverage # 配合 PHPUnit phpunit --coverage-html ./report --coverage-xml ./coverage.xml
需 PHPUnit 設定 <coverage processUncoveredFiles="true">。
| 問題 | 解決 |
|---|---|
| 效能極差 | 僅開發環境啟用;生產關閉或僅開 develop 模式 |
| 無法連線 IDE | 檢查防火牆 9003 埠、xdebug.client_host、IDE 監聽設定 |
| 追蹤檔案過大 | 限制 xdebug.trace_output_dir 空間、設定 xdebug.collect_params=1 |
| 覆蓋率記憶體溢出 | 大專案分模組測試、改用 PCOV (PHP 7.1+) |
pecl install pcov # php.ini extension=pcov.so pcov.enabled=1 pcov.directory=/var/www/html pcov.exclude="~vendor~"
PCOV 專注覆蓋率,效能優於 Xdebug 10 倍以上,適合 CI 流程。