如果您覺得此擴展名有用,如果它可以幫助您解決問題,並且如果您欣賞此處給出的支持,請考慮贊助我們的工作。
安裝擴展名:按F1
,鍵入ext install php-debug
。
此擴展是Derick Rethans的VS代碼和Xdebug之間的調試適配器。 Xdebug是需要在服務器上安裝的PHP擴展名(Linux上的.so
文件和Windows上的.dll
)。
安裝Xdebug我強烈建議您製作一個簡單的test.php
文件,放置一個phpinfo();
在其中說明,然後復制輸出並將其粘貼到Xdebug安裝嚮導中。它將對其進行分析並為您的環境提供量身定制的安裝說明。簡而言之:
在Windows上:為您的PHP版本,Architecture(64/32位),線程安全(TS/NTS)和Visual Studio編譯器版本下載適當的預編譯DLL,並將其放置在PHP擴展文件夾中。
在Linux上:要么將源代碼作為Tarball下載,要么用GIT克隆,然後對其進行編譯。或查看您的發行版是否已經提供了預製的軟件包。
通過將zend_extension=path/to/xdebug
添加到您的php.ini中,將php配置為使用xdebug。您的php.ini的路徑在“加載配置文件”下的phpinfo()
輸出中顯示。
在您的php.ini
中啟用遠程調試:
對於Xdebug v3.xx:
xdebug.mode = debugxdebug.start_with_request = yes
對於Xdebug v2.xx:
xdebug.remote_enable = 1xdebug.remote_autostart = 1xdebug.remote_port = 9000
還有其他方法可以告訴Xdebug連接到遠程調試器,例如cookie,查詢參數或瀏覽器擴展程序。我推薦remote_autostart
(XDEBUG V2)/ start_with_request
(xdebug v3),因為它“恰好工作”。還有多種其他選項,例如端口,請參閱有關遠程調試的Xdebug文檔以獲取更多信息。請注意,默認的Xdebug端口從9000更改為Xdebug V2之間,從9000更改為9003。
如果您正在進行Web開發,請不要忘記重新啟動Web服務器以重新加載設置。
通過檢查Xdebug部分的phpinfo()
輸出來驗證安裝。
在您的項目中,請轉到調試器並擊中小齒輪圖標,然後選擇PHP 。將為您創建新的啟動配置,並使用三種配置:
收聽Xdebug此設置將僅在Xdebug的指定端口(默認為9003)上聆聽。如果您像上面建議的那樣配置了Xdebug,則每次您向Web服務器瀏覽器提出請求或啟動CLI腳本XDebug時,您都可以連接,您可以停止在斷點,異常等方面停止。
啟動當前打開腳本此設置是CLI調試的示例。它將作為CLI啟動當前打開的腳本,在調試控制台中顯示所有STDOUT/STDERR輸出,並在腳本退出後結束調試會話。
啟動內置Web服務器此配置在隨機端口上啟動了PHP內置Web服務器,並使用serverReadyAction
指令打開瀏覽器。該端口是隨機的(Localhost:0),但可以更改為所需的固定端口(例如:Localhost:8080)。如果需要路由器腳本,請與program
指令一起添加。其他PHP/XDEBUG指令在每個頁面加載上觸發調試。
Xdebug V2(舊版)安裝也有配置。
有關通過VS代碼調試的更多一般信息,請訪問https://code.visualstudio.com/docs/editor/debugging。
注意:您甚至可以在不
launch.json
的情況下調試腳本。如果沒有打開文件夾,並且VS代碼狀態欄是紫色的,則按F5
使用XDEBUG3特定參數啟動打開腳本。如果php可執行文件不在路徑中,則可以為其提供設置php.debug.executablePath
。要調試工作,仍必須正確安裝Xdebug。
request
:始終"launch"
hostname
:偵聽Xdebug時要綁定的地址(默認:所有IPv6連接(如果有),其他所有IPv4連接)或Unix域套接字(帶有unix://
)或Windows Pipe ( ?pipename
) - 無法與港口
port
:聆聽Xdebug的端口(默認值: 9003
)。如果將端口設置為0
則係統選擇一個隨機端口,並且佔位符${port}
被env
和runtimeArgs
中所選端口替換。
stopOnEntry
:是否要在腳本的開頭中斷(默認: false
)
pathMappings
:服務器路徑列表映射到計算機上的本地源路徑,請參見下面的“遠程主機調試”
log
:是否將VS代碼和適配器之間的所有通信記錄到調試控制台之間。請參閱進一步的故障排除。
ignore
:應忽略錯誤的球模式的可選數組(例如**/vendor/**/*.php
)
ignoreExceptions
:一個應忽略的異常類名稱的可選數組(例如BaseException
, NS1Exception
, *Exception
或**Exception*
)
skipFiles
:一系列環球圖案,在調試時跳過。允許恆星模式和否定,例如**/vendor/**
或!**/vendor/my-module/**
。
skipEntryPaths
:Glob模式的數組,以立即分離並忽略輸入腳本是否匹配(例如**/ajax.php
)。
maxConnections
:僅接受此數量的並行調試會話。將撤離其他連接,並且他們的執行將繼續而無需調試。
proxy
:DBGP代理設置
enable
:要啟用代理註冊設置為true
(默認為`false)。
host
:代理的地址。支持主機名,IP地址或UNIX域插座(默認值:127.0.0.1)。
port
:適配器將向代理註冊的端口(默認值: 9001
)。
key
:允許代理可以將請求匹配到您的編輯器的唯一鍵(默認: vsc
)。默認值是從VSCODE設置php.debug.idekey
中獲取的。
timeout
:在放棄與代理的連接之前,要等待的毫秒數(默認值: 3000
)。
allowMultipleSessions
:如果代理應同時轉發多個會話/連接(默認: true
)。
xdebugSettings
:允許您覆蓋Xdebug的遠程調試設置,以微調Xdebug滿足您的需求。例如,您可以使用max_children
和max_depth
播放,以更改檢索到的數組和對象子的最大數量,以及在數組和對像等結構中的最大深度。這可以加快慢速機器上的調試器。有關可以設置的功能名稱的完整列表,請參考Xdebug文檔。
max_children
:最初檢索的數組或對象子女的最大數量
max_data
:最初檢索的最大可變數據量。
max_depth
:調試器發動機在發送陣列,哈希或對象結構向IDE時可能返回的最大深度(由於逐步檢索深度,因此不需要更改它,因此很大的值可能會導致IDE懸掛)。
show_hidden
:如果要擁有有關屬性的更詳細的內部信息(例如,類的私人成員等),則可以由IDE設置此功能。零表示未向IDE顯示隱藏的成員。
xdebugCloudToken
:而不是在本地聆聽,而是打開連接並用Xdebug Cloud註冊,並接受該連接上的調試會話。
stream
:允許影響DBGP流。 Xdebug僅支持stdout
請參閱DBGP Stdout
stdout
:重定向stdout流:0(禁用),1(副本),2(重定向)
特定於CLI調試的選項:
program
:應該啟動腳本的路徑
args
:參數傳遞給腳本
cwd
:啟動腳本時要使用的當前工作目錄
runtimeExecutable
:用於啟動腳本的PHP二進製文件的路徑。默認情況下,路徑上的一個。
runtimeArgs
:其他論點要傳遞給PHP二進制
externalConsole
:在外部控制台窗口而不是調試控制台中啟動腳本(默認: false
)
env
:環境變量傳遞到腳本
envFile
:包含環境變量定義的文件的可選路徑
線斷點
有條件的斷點
命中計數斷點:支持>=n
, ==n
和%n
之類的條件
功能斷點
介入,介入,走出去
突破進入
從停止進入(F10/F11)開始
違反未知的例外和錯誤 /警告 /通知
多個並行請求
堆棧跟踪,示波器變量,超級全局,用戶定義的常數
數組和對象(包括className,私有和靜態屬性)
調試控制台
手錶
設置變量
作為CLI運行
運行而無需調試
DBGP代理註冊和未註冊支持
Xdebug雲支持
要在遠程主機上調試運行的應用程序,您需要告訴XDEBUG與localhost
不同的IP連接。可以通過將xdebug.client_host
設置為IP來完成,也可以通過設置xdebug.discover_client_host = 1
來使XDebug始終連接到執行Web請求的機器。後者是唯一支持多個用戶調試同一服務器並為Web項目“工作”的設置。同樣,請參閱有關該主題的Xdebug文檔以獲取更多信息。
要使VS代碼在本地計算機上的右文件中映射服務器上的文件,您必須在啟動。JSON中設置pathMappings
設置。例子:
//服務器 - >本地“ pathmappings”:{“/var/www/html”:“ $ {workspacefolder}/www”,“/app”:“ $ {workspacefolder}/app”}
另請注意,設置任何CLI調試選項都不會與遠程主機調試一起使用,因為該腳本始終在本地啟動。如果要在遠程主機上調試CLI腳本,則需要從命令行手動啟動它。
調試器可以用IDE鍵註冊到DBGP代理。然後,代理將僅轉到IDE,只有那些具有該指定IDE密鑰的DBGP會話。這在多源環境中很有幫助,在該環境中,開發人員不能同時使用相同的DBGP端口。需要仔細的設置,該請求對Web服務器的請求包含匹配的IDE密鑰。
Dbgpproxy的官方實施。
還建議使用Xdebug助手瀏覽器擴展名。那裡的請求側IDE鍵可以輕鬆配置。
在stackoverflow上詢問一個問題
如果您認為找到一個錯誤,請打開問題
確保您已安裝了此擴展名的最新版本和xDebug
嘗試一個簡單的PHP文件以重新創建問題,例如從TestProject中
設置"log": true
和觀察調試控制檯面板
在您的php.ini中,將xdebug.log = /path/to/logfile
設置
在Twitter @damjancvetko上伸出援手
要在此適配器上攻擊,請克隆存儲庫,然後在VS代碼中打開它。您需要安裝了NPM並在路徑中的NODEJS。還應安裝最近的PHP和Xdebug,並在您的路徑中安裝。
通過在項目目錄中的命令行上安裝NPM npm install
,或選擇Terminal / Run Task... / npm / npm: install
。
通過在項目目錄中的命令行上運行npm run watch
Terminal / Run Build Task...
在VS代碼菜單中選擇“ build / Watch”過程。
通過打開運行和調試側欄,選擇Debug adapter
配置並單擊綠色運行箭頭(或擊中F5
)來啟動調試適配器。編譯的適配器將在“服務器模式”中運行,並在TCP端口4711上偵聽。
通過運行code testproject --extensionDevelopmentPath=.
在項目目錄中的命令行上或選擇Launch Extension
運行和調試配置並按下綠色運行箭頭。另一個快捷方式是運行npm run start
。您還可以運行內部人員構建VS代碼,以測試新功能。
在“擴展開發主機”實例中,開放.vscode/launch.json
和Uncomment debugServer
配置行。通過選擇所需的配置並擊中F5
來運行PHP調試會話。現在,您可以像上面指定的那樣調試testProject,並在第一個VS代碼實例中設置斷點,以逐步瀏覽適配器代碼。
有關測試擴展的更多信息,請訪問https://code.visualstudio.com/api/working-with-with-extensions/testing-extension。
測試用摩卡咖啡編寫,可以通過npm test
或Terminal / Run Task... / npm: test
。當您提交PR時,測試將在Linux,MACOS和Windows上的CI上運行,以針對多個PHP和Xdebug版本進行。
提交PR之前,還可以運行npm run lint
或Terminal / Run Tasks... / npm: lint
。