嘿,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

相关文章
|
6天前
|
网络协议 Linux Go
分享一个go开发的工具-SNMP Server
分享一个go开发的工具-SNMP Server
40 0
|
6天前
|
存储 Go C语言
如何用Go开发eBPF程序
【2月更文挑战第7天】
|
6天前
|
开发框架 安全 中间件
Go语言开发小技巧&易错点100例(十二)
Go语言开发小技巧&易错点100例(十二)
32 1
|
6天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
60 1
|
6天前
|
存储 关系型数据库 Go
【Go语言专栏】基于Go语言的RESTful API开发
【4月更文挑战第30天】本文介绍了使用Go语言开发RESTful API的方法,涵盖了路由、请求处理、数据存储和测试关键点。RESTful API基于HTTP协议,无状态且使用标准方法表示操作。在Go中,通过第三方库如`gorilla/mux`进行路由映射,使用`net/http`处理请求,与数据库交互可选ORM库`gorm`,测试则依赖于Go内置的`testing`框架。Go的简洁性和并发性使得它成为构建高效API的理想选择。
|
6天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
6天前
|
Java Go C#
开发语言漫谈-go
go的设计思路和python差不多,就是要降低入门难度,提高开发效率
|
6天前
|
搜索推荐 Linux Go
分享一个go开发的端口转发工具-port-forward
分享一个go开发的端口转发工具-port-forward
32 0
|
6天前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
6天前
|
Go
Go语言开发小技巧&易错点100例(十一)
Go语言开发小技巧&易错点100例(十一)
20 0