记一次远程调试

前言

docker for windows就是一个**(无能狂怒),想build一个环境复现,结果build不起来,无奈使用vps上的docker for linux进行远程调试。这里记录一下如何进行远程调试。

环境

1
[win10]-①->[debian8-②->[docker]]

本地环境为win10系统,使用vscode。
远程环境为debian8,拥有公网,开启一个docker容器暴露80端口

ssh

选择使用ssh作为第①步的链接
首先为vscode安装Remote-SSH扩展

安装完毕后,右侧栏会多出一个显示器一样的图标,点进后添加链接

之后进行设置
设置 => 用户 => 扩展 => Remote-SSH => [Config file & Show Login Terminal]

将自己的ssh config file的path填入config file中,虽然vscode会自动寻找config file,但容易出错。
出错的原因应该是环境变量设置有问题,但我乱七八糟的环境变量太多了,懒得搞了=。=

之后选上Show Login Terminal选项,可以在终端显示密码的输入提示。虽然可以使用公匙登录,但因为windows的权限设置,如果公匙文件的权限没有严格锁死的话是不允许使用的。所以懒癌发作(

之后按照vscode的提示设置就好
成功连接后,我们就相当于在远程服务器的本地进行操纵了。

launch.json

接下来对php进行远程Debug
因为php环境是使用Docker环境搭建的,所以在填写launch.json时仍然需要按照远程环境的方法填写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000, //Xdebug的端口
"stopOnEntry": true, //程序一进入就暂停,个人喜好,可以去掉
"pathMappings": { //远程文件对本地文件的映射
"/www": "${workspaceRoot}"
}
}
]
}

xdebug.ini

接下来填写xdebug.ini
因为其使用在docker环境,所以有一个专用的host——host.docker.internal来访问到宿主主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
zend_extension=xdebug.so
[XDebug]
;开启调试
xdebug.remote_enable = on

;详见https://xdebug.org/docs/remote#remote_autostart
xdebug.remote_autostart = 1

;docker特有,指向宿主主机
;2020-7-13更新
;host.docker.internal必然是有对应的host才生效
;但使用debian的镜像时DNS文件有问题,无法解析
;可以尝试172.19.0.1
xdebug.remote_host = host.docker.internal
xdebug.remote_handler = dbgp

;宿主监听的port
xdebug.remote_port = 9000

;将请求来源的ip作为debug响应地址,这里地址可以确切获得就罢了
xdebug.remote_connect_back = 0

;ide的关键字,这里时VSCODE
xdebug.idekey = VSCODE
xdebug.auto_trace = 1

;是否跟踪导入的文件名
xdebug.collect_includes = 1

xdebug.collect_params = 1
xdebug.remote_log = /tmp/xdebug.log

Dockerfile

在设置dockerfile或者docker-compose的端口时,不必将容器内部的9000端口暴露
因为xdebug的本质是由ide来开放9000端口接受xdebug的请求,所以暴露容器的9000端口没有用=。=

最后

享受你的debug时光吧!(((

Comments