几年来,我一直在 Windows 中使用 VSCode + Docker,并且设法拥有一个完全正常工作的开发环境,没有任何问题。
最近我用 WSL2 设置了一个新的开发环境。使用带有WSL2容器的Docker Windows和带有远程连接到WSL的Windows上的VSCode,将我的所有项目,库,CLI等移至WSL。一切工作都非常顺利,我喜欢我可以将一切分开的事实。
但是最近我遇到了一个我无法解决的问题,我失去了调试 PHP 文件的能力。
我正在使用 VSCode 远程 WSL 扩展来处理 WSL 内的项目,但是当我尝试调试时,没有任何 react 。
对于我使用的每个开发环境(Windows、MacOS 和 WSL),我的 VSCode 中都有树调试设置。除 WSL 外的所有工作。当我尝试使用WSL进行调试时,实际上什么也没有发生,没有输出错误,没有调试控制台信息,什么都没有...
这是我的VSCode调试设置:
{
"version": "0.2.0",
"configurations": [{
"name": "Listen for XDebug Win10",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/var/www/project-a/api": "\\\\wsl$\\Ubuntu\\home\\ubuntu\\PROJECTS\\project-a\\api",
},
"ignore": [
"**/vendor/**/*.php"
]
},
{
"name": "Listen for XDebug MacOS",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/var/www/project-a/api": "/Users/ricky/PROJECTS/project-a/api",
},
"ignore": [
"**/vendor/**/*.php"
]
},
{
"name": "Listen for XDebug WSL",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/var/www/project-a/api": "/home/ubuntu/PROJECTS/project-a/api",
},
"ignore": [
"**/vendor/**/*.php"
]
},
]
}
我究竟做错了什么?关于如何解决这个问题的任何想法?### 更新: 我已将原始正确答案更改为新答案。尽管@romain-prevost 的解决方案奏效了,但我认为@dark 的方法要简单得多:)
最佳答案
忘记其他答案。它们正在工作,但在我看来太复杂了。
问题是,您无法连接到xdebug。
解决方案是告诉xdebug将remote_host设置为host.docker.internal
。那里的所有内容都可用于localhost。现在,您只需要在Visual Studio Code中通过localhost
收听hostname
即可。
等等
现在,您可以在phpunit测试中或在命令行脚本中调试浏览器调用的内容。
完整的例子
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"/var/www/html/": "${workspaceRoot}"
},
"hostname": "localhost"
}
]
}
php.ini [XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9000
XDebug 3的更新launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/": "${workspaceRoot}"
},
"hostname": "localhost"
}
]
}
php.ini [XDebug]
xdebug.mode = develop
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
关于php - 使用 Docker 和 WSL2 在 VSCode 中调试 PHP 时出现的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62104199/