2017-07-26 39 views
1

我終於得到了Xdebug的工作(包括斷點和「跨越」的能力),用於單元測試,功能測試以及在瀏覽器中瀏覽。除了使用@runTestsInSeparateProcesses之外,Xdebug斷點總是工作嗎?

但是,每當我使用@runTestsInSeparateProcesses因爲this reason,Netbeans斷點不再起作用。

如何在使用@runTestsInSeparateProcesses的測試中使用Xdebug斷點?

我在Windows 10版本1607 Build 14393.0上使用Netbeans 8.2。 PHPUnit 5.7.21。我運行Laravel 5.4 Homestead(這是Vagrant 1.9.5),所以這意味着我的服務器是Ubuntu 16.04.2 LTS(GNU/Linux 4.4.0-66-generic x86_64)。

回答

2

您需要將xdebug配置添加到您的php.ini中,這樣如果phpunit再次調用php解釋器(b/c of @runTestsInSeparateProcesses)在單獨的進程中運行測試,則會自動激活xdebug(遠程調試設置等),而沒有任何其他參數傳遞給可執行文件。

如果您已完成此操作(可能不是您的問題),請確保您的IDE正在接受多個單一的xdebug連接(xdebug連接限制或類似)。這是必要的,因爲新的PHP進程將啓動需要額外連接的新xdebug遠程會話。如果連接沒有完成,xdebug將等待連接限制爲1(1),您將看到PHP掛起。

這種方法的缺點是,xdebug將永遠加載,這將增加約。在CLI中執行PHP 10%的性能。

只要這是在開發框中,您可以創建一些腳本,您可以運行該腳本來爲已安裝的PHP二進制文件打開和關閉xdebug默認配置。

Composer不受此影響,因爲它會在禁用xdebug的情況下重新啓動,但大多數其他PHP cli工具不會這樣做(也許不需要它,因爲有很多可用的性能和缺點可以忽略不計,對於執行大量對象創建的PHP腳本來說,這是非常重要的)。

所以,設置你的php.ini並啓用xdebug。一個好的IDE會顯示它自動添加的設置(PHP cli -d選項),只需將它們添加到您的php.ini中,您應該對該測試場景適用。

當你得到它的工作,思考如何在飛行中禁止設置(sed是非常方便的是,尤其是-i [編輯在地方]在GNU系統,#1應該讓你高興的基礎在這裏, Windows我不能說什麼工作得很好,萬一你想知道)。

附加說明:我不能具體說Netbeans,因爲我沒有使用它,但是與Phpstorm的情況完全相同(我假設是真誠的),因爲它在調用測試時將xdebug添加到PHP配置中(調試,覆蓋)以及導致其他PHP腳本的子進程無法調試,除非我將該添加的xdebug配置放入php.ini

+0

謝謝。我會繼續前進+1並接受這個答案,因爲它看起來像你知道你在說什麼。我會閱讀並稍後嘗試。謝謝! – Ryan

+1

不要接受它(或以後不接受它),除非它回答了*你的問題。我可能只是一個好的談話者,但你的問題可能會有所不同。只是說。 ;) – hakre