Visual Studio Code 調試 PHP
2018/12/4 更新
Nginx + php-cgi.exe 下與 Visual Studio Code 配合調試
必需環境
- Visual Stduio Code
- PHP
- XDebug Application Library(dll)
- Web服務器 IIS(參考環境 Win10)
第一步基本道理
Web服務器用來運行Http請求,PHP接收IIS調用運行PHP請求,XDebug截獲運行,傳遞到VS Code——以上為個人理解
第二步安裝
第三步配置
- 確認 Visual Studio Code 安裝並啟用了
PHP Debug
插件 - 開啟PHP本身的ini配置文件,並在
Dynamic Extension
塊中新增表示 XDebug 的塊,內容為:
[xdebug]
zend_extension = "php_xdebug-2.7.0beta1-7.2-vc15-nts-x86_64.dll"
xdebug.remote_enable = On
xdebug.remote_autostart = On
zend_extension
是下載的 XDebug 動態連接文件的地址,其值可以是相對地址或絕對地址。此處默認將dll文件放到了PHP安裝目錄下的 ext
路徑下,因此地址是相對路徑。
- XDebug本身沒有可配置的地方
- IIS服務器配置好和PHP的關系即可
第四步試用
-
對要調試的PHP文件打上斷點
-
點擊 VS Code 左側工具欄上的 Debug|調試 按鈕(第四個),在頂部選擇框中選擇
Listen for XDebug
(或新增一個配置)
-
選擇后可以看到其配置文件,通常無需更改其內容
-
按
F5
啟動調試,按下后 VS Code 界面可以看到頂部多了一個調試工具欄
-
在瀏覽器中運行要調試的地址,配置無誤的話將在運行到斷點時切換回 VS Code,此時可以看到程序停在斷點處,可以使用
F10
、F11
快捷鍵向下繼續運行,鼠標懸停在變量處也可以查看到變量值
2018/12/4 更新
Nginx 和 php-cgi 的配合
當不使用 IIS 作為服務器時,可以使用這兩個家伙的組合。Nginx 的啟動使用快捷方式,無需參數,如下
d:\applications\nginx\nginx.exe
檢查 PHP 要使用的配置文件中,有關 XDebug 的配置與即將運行的 PHP 是否一致,例如配置文件中如果 xdebug.remote_port = 8000 而 php 監聽的是默認 9000 端口,就會無法截獲調試信息。當前 PHP 配置文件使用“指定的php-dev.ini”,端口默認9000,在Windowns環境下寫了一個bat用來啟動和關閉,如下
@echo off
echo Starting PHP FastCGI...
d:\applications\php\php-cgi.exe -b 127.0.0.1:9000 -c d:\applications\php\php-dev.ini
啟動后 Nginx 沒有界面,在后台運行,PHP有一個Console窗口不可關閉。檢查 VS Code 中配置是否正確,點擊左側工具欄 Debug
按鈕,選擇調試界面中要使用的配置文件,可以點擊 齒輪
按鈕查看配置文件中配置是否符合當前環境(如第四步試用中內容)。如配置無誤,如 第四步試用
中描述,即可截獲調試內容。
小心!
- 核對 PHP 的配置文件,默認端口號是否改變,如果 PHP 自身運行端口改變,調試信息需要跟着變,建議保留默認的 9000
- 核對 PHP 配置文件中 XDebug 部分,如果特殊需要,只填寫最少的
zend_extension
、xdebug_remote_enable
、xdebug_remote_autostart
三個就行,這樣未設置的部分就會按照默認進行,如會監聽默認9000端口。今天就踩了個小坑,配合 PHPSTORM 調試時,XDebug 部分修改了端口為 9009,導致運行時 VS Code 截獲不到調試信息。修改為只剩三個配置項時,成功。 - 冷靜細致,php 配置文件、配置文件中 XDebug 部分、VS Code 調試配置(launch.json)三大位的內容要能配合得上,尤其是端口號,才能成功。
- 發現,網上 N 多文章說的瀏覽器需要安裝插件似乎不是“必需”的,調試時使用 QQ 瀏覽器,未安裝或禁用了
Xdebug Helper
后一樣可以。