仅在 运行 测试时才能调试
Able to debug ONLY when running test
使用 laravel/homestead vagrant box、VS Code 和 PHP 调试扩展,我可以设置断点并仅在 运行 通过 phpunit 进行测试时单步执行代码。
如果我通过浏览器访问相同的资源,我的断点永远不会命中。
基于我可以在测试 运行ning 时进行调试的事实,我假设 xdebug 正在工作并且配置正确。
我的 .env 文件:
APP_NAME=lms
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=https://lms.test
我的 .env.testing 文件:
APP_NAME=lms
APP_ENV=testing
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=https://lms.test
PHP调试配置:
"configurations": [
{
"name": "Listen for XDebug on Homestead",
"type": "php",
"request": "launch",
"pathMappings": {
"/home/vagrant/code/MyProject": "C:\Users\lemon\source\vagrant\MyProject"
},
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
app.php
'env' => env('APP_ENV', 'production'),
'debug' => env('APP_DEBUG', false),
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
10.0.2.2
/etc/php/7.4/cli/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable = 1
xdebug.remote_autostart=1
xdebug.remote_host=10.0.2.2
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512
我已经启用了 xdebug 日志记录。当我在测试期间 运行 调试器时,将创建日志并显示预期的条目。如果我然后删除日志文件并从浏览器获取与测试相同的控制器,则不会创建 xdebug 日志。
也许一些新鲜的眼睛可以找出问题所在。谢谢!
无奈之下,我从 20-xdebug.ini 中删除了这些行(并重新启动了 php 服务)并且它起作用了。
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512
不知道为什么,但我希望这对其他人有帮助。
在命令行中,xdebug.remote_connect_back=1
设置无效。在 Web 环境中,它指示 Xdebug 从 HTTP headers 建立到 IP 地址的 IDE 连接。但是如果中间有 NAT 网络,就像 Docker 经常出现的情况一样,Xdebug 无法连接来自 HTTP header 的 IP 地址,因此无法建立调试连接.
当您删除 xdebug.remote_connect_back=1
设置时,Xdebug 将专门使用 xdebug.remote_host
设置,您自己已经正确设置(10.0.2.2
)。
当使用Docker时,你几乎不能使用xdebug.remote_connect_back
。
使用 laravel/homestead vagrant box、VS Code 和 PHP 调试扩展,我可以设置断点并仅在 运行 通过 phpunit 进行测试时单步执行代码。
如果我通过浏览器访问相同的资源,我的断点永远不会命中。
基于我可以在测试 运行ning 时进行调试的事实,我假设 xdebug 正在工作并且配置正确。
我的 .env 文件:
APP_NAME=lms
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=https://lms.test
我的 .env.testing 文件:
APP_NAME=lms
APP_ENV=testing
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=https://lms.test
PHP调试配置:
"configurations": [
{
"name": "Listen for XDebug on Homestead",
"type": "php",
"request": "launch",
"pathMappings": {
"/home/vagrant/code/MyProject": "C:\Users\lemon\source\vagrant\MyProject"
},
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
app.php
'env' => env('APP_ENV', 'production'),
'debug' => env('APP_DEBUG', false),
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
10.0.2.2
/etc/php/7.4/cli/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable = 1
xdebug.remote_autostart=1
xdebug.remote_host=10.0.2.2
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512
我已经启用了 xdebug 日志记录。当我在测试期间 运行 调试器时,将创建日志并显示预期的条目。如果我然后删除日志文件并从浏览器获取与测试相同的控制器,则不会创建 xdebug 日志。
也许一些新鲜的眼睛可以找出问题所在。谢谢!
无奈之下,我从 20-xdebug.ini 中删除了这些行(并重新启动了 php 服务)并且它起作用了。
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512
不知道为什么,但我希望这对其他人有帮助。
在命令行中,xdebug.remote_connect_back=1
设置无效。在 Web 环境中,它指示 Xdebug 从 HTTP headers 建立到 IP 地址的 IDE 连接。但是如果中间有 NAT 网络,就像 Docker 经常出现的情况一样,Xdebug 无法连接来自 HTTP header 的 IP 地址,因此无法建立调试连接.
当您删除 xdebug.remote_connect_back=1
设置时,Xdebug 将专门使用 xdebug.remote_host
设置,您自己已经正确设置(10.0.2.2
)。
当使用Docker时,你几乎不能使用xdebug.remote_connect_back
。