我最近配置了VS代码以使用xdebug调试PHP。它可以与我的应用程序代码可靠地一起工作,但是当我使用PHPunit运行单元测试时,我的断点将被忽略。
我的服务器在一个无聊的盒子中运行。
我的php.ini
文件包含以下几行:
[xdebug]
zend_extension="/usr/lib/xdebug/xdebug-2.2.7/modules/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=1
xdebug.remote_autostart=1
我使用PHP Debug VS Code扩展名。
这是我的launch.json
配置:
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"pathMappings": {
"/var/www/mysite.local/": "${workspaceFolder}"
},
"port": 9000,
"log": true
}
我的单元测试运行良好,例如,在/var/www/mysite.local
中,我可以运行:
phpunit --filter myTestMethod path/to/my/test/file/myTest.php
但是在测试运行时,我一直在测试中遇到的断点将始终被忽略,我无法弄清原因。
有人有类似的问题吗?在正常的应用程序请求和单元测试的上下文中,调试的工作方式之间是否有区别?
答案 0 :(得分:0)
当您使用绝对路径运行单元测试时,由于pathMappings
的设置,您的问题正在发生,我的建议是替换
"pathMappings": {
"/var/www/mysite.local/": "${workspaceFolder}"
},
使用
"pathMappings": {
"/var/www/mysite.local/": "${workspaceFolder}",
"${workspaceFolder}": "${workspaceFolder}"
},
或在运行单元测试时将其禁用
答案 1 :(得分:0)
在我的情况下,phpunit正在调用php cli,而后者未使用已激活xdebug的测试服务器使用的php.ini conf文件。
确保使用正确的php.ini文件。您可以在使用-c
参数调用php时指定它。
您可以通过编辑phpunit的启动脚本将该参数传递给php,该脚本可以在vendor / bin / phpunit.bat(对于Windows)中找到。
文件如下:
@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/../phpunit/phpunit/phpunit
php "%BIN_TARGET%" %*
只需将php后面的-c
添加到php.ini目录的路径即可:
php -c PATH_TO_PHP.INI_DIRECTORY "%BIN_TARGET%" %*