嘿,Go开发时我是如何远程调试的

168 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

一、搭建个人CI

1、创建镜像

注:如果环境上镜像已经创建好了,此步骤可以省略。

个人CI的镜像是基于base:1.0镜像创建的,在原有的镜像基础上增加安装了openssh和go语言远程调试工具dlv

1、创建镜像项目,项目文件包含Dockerfile,dlv文件是在linux环境中编译好的,可以直接复制到容器中使用,start_ssh.sh是为了容器自启动ssh服务

2、下载压缩包,在linux环境上解压文件夹,在文件夹中执行一下构建命令即可创建完成个人CI的容器镜像(前提是环境上已经下载了base:1.0镜像

docker build . -t personal-ci:1.0-20220428

3、检查镜像

docker images

2022-04-29_141926.png

2、创建容器

创建镜像命令如下

docker run -d -it --name test --privileged=true -p 20022:22 -p 20045:2345 personal-ci:1.0-20220428  /bin/bash

需要修改的地方:

--name:容器名称,可以使用自己的工号作为容器名,方便后续操作。

-p : 端口映射,容器里面有用到ssh的22端口和dlv的2345端口,所以需要映射到linux主机的端口。

注:同一个主机上面会有不同的人使用,所以在使用端口映射时,一定要使用为被使用的端口

查看容器

docker ps |grep test

3、进入容器

docker exec -it test sh  

二、远程调试

1、goland设置文件同步

1、打开项目,点击Tool -> Deployment -> Configuration

2022-04-29_141926.png

2、在跳出来的弹框上面点击加号,选择SFTP,并且命名

2022-04-29_141926.png

2022-04-29_141926.png

2022-04-29_141926.png

3、选择SSH Configuration,之前没有创建过,需要创建一下。

2022-04-29_141926.png

创建SSH,Host ip地址是linux主机的地址,port是创建容器时,容器22端口映射在主机上的端口。用户名密码统一是root/onecap_root,点击测试连接,连接成功后,点击ok保存。

2022-04-29_141926.png

选择创建的SSH

2022-04-29_141926.png

设置文件夹映射和自动同步

2022-04-29_141926.png

选择映射在home目录下的同名文件夹(需要自己创建),然后点击OK创建完成

2022-04-29_141926.png

回到项目,选择项目文件夹,点击Tool->Deployment -> Upload to远程容器。第一次同步需要点击upload,之后可以设置文件修改时,保存自动上传。

(注:如果项目比较大,建议打压缩包上传,解压,不然需要耗费很多时间)

2022-04-29_141926.png

2、goland设置远程debug

选择测试用例文件,配置远程调试

2022-04-29_141926.png

2022-04-29_141926.png

填写Name,Host和Port,Host是远程linux主机IP,port是容器2345端口映射的linux主句端口,点击ok成功

2022-04-29_141926.png

3、打断点,调试

1、在测试用例文件和主文件里面设置断点

2022-04-29_141926.png

2022-04-29_141926.png

2、远程到容器,到测试用例所在目录,开启远程调试

2022-04-29_141926.png执行命令

dlv test  --headless --listen=:2345 --api-version=2

2022-04-29_141926.png

3、goland编辑器里面开启debug

2022-04-29_141926.png

1、可以调试测试用例

2022-04-29_141926.png

2、也可以调试主程序

2022-04-29_141926.png

注:每次调试完成之后,下次调试,都需要到远程容器里面再次开启远程调试。即到调试文件所在文件夹执行命令

dlv test  --headless --listen=:2345 --api-version=2