仅在运行测试时才能调试

问题描述 投票:0回答:2

使用laravel / homestead vagrant box,VS Code和PHP Debug扩展,仅当通过phpunit运行测试时,我才能设置断点和单步执行代码。

如果我通过浏览器访问相同的资源,则不会打断点。

基于我可以在测试运行时进行调试的事实,我假设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日志记录。在测试过程中运行调试器时,将创建日志并显示预期的条目。如果然后我删除日志文件并从浏览器进行GET,并将其发送到与测试相同的控制器,则不会创建xdebug日志。

也许有些新鲜的眼睛可以识别出问题所在。谢谢!

php laravel xdebug vscode-debugger
2个回答
1
投票

在命令行上,xdebug.remote_connect_back=1设置无效。在Web环境中,它指示Xdebug从HTTP标头建立与IP地址的IDE连接。但是,如果像Docker那样经常存在NAT网络,则Xdebug无法将HTTP标头中的IP地址连接到网络,因此无法建立调试连接。

[删除xdebug.remote_connect_back=1设置时,Xdebug专门使用xdebug.remote_host设置,您已经自行正确设置了10.0.2.2

[使用Docker时,您几乎永远无法使用xdebug.remote_connect_back


0
投票

无奈之下,我从20-xdebug.ini中删除了这些行(并重新启动了php服务,并且可以正常工作。

xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512

不知道为什么,但是我希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.