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

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

一、搭建个人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

image.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

image.png

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

image.png

image.png

image.png

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

image.png

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

image.png

选择创建的SSH

image.png

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

image.png

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

image.png

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


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


image.png


2、goland设置远程debug


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

image.png

image.png

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

image.png


3、打断点,调试


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

image.png

image.png

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

image.png

执行命令

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

image.png

3、goland编辑器里面开启debug

image.png

1、可以调试测试用例

image.png

2、也可以调试主程序

image.png


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


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

目录
相关文章
|
8天前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
5天前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
7天前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
26天前
|
缓存 编译器 Go
开发与运维线程问题之Go语言的goroutine基于线程模型实现如何解决
开发与运维线程问题之Go语言的goroutine基于线程模型实现如何解决
37 3
|
4天前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
11天前
|
Go 开发者
Go1.22 新特性:Slices 变更 Concat、Delete、Insert 等函数,对开发挺有帮助!
Go1.22 新特性:Slices 变更 Concat、Delete、Insert 等函数,对开发挺有帮助!
|
1月前
|
算法 网络协议 Linux
|
2月前
|
中间件 Go
go语言后端开发学习(三)——基于validator包实现接口校验
go语言后端开发学习(三)——基于validator包实现接口校验
|
2月前
|
存储 前端开发 中间件
Go Web 开发 Demo【用户登录、注册、验证】(3)
Go Web 开发 Demo【用户登录、注册、验证】
|
2月前
|
前端开发 数据库连接 Go
Go Web 开发 Demo【用户登录、注册、验证】(1)
Go Web 开发 Demo【用户登录、注册、验证】