golang remote debug和docker debug
2023-09-14 09:12:25 时间
在编写 Go 代码的时候,因为很多时候都是需要调试服务器上的代码的,作为一个年长的工程师,肯定不能用 log.Printf
来调试问题,所以我选择了 delve 这个工具,通过 delve 我可以像本地调试代码一样在 Goland 中调试 Go 代码,很是惬意。如果要说缺点的话,那就是在服务端启动 delve 的 server 端之后,必须在一定时间内(不知道具体多久)连接上它,不然会关闭;同时,在我断开调试之后,server 会自动关闭,如果我要再次调试,那就必须再运行一次 server(当然,可以通过不关闭 debug 解决,就是不太友好)。
具体使用 delve 调试还是比较简单的,只需要两步:
第一步:在服务器上运行 delve 服务器
运行 delve 服务器有几种形式,可以是用 delve 运行 Go 代码,也可以是运行可执行程序,也可以是侵入一个运行中的 Go 程序,一般来说,attach 一个运行中的 Go 程序比较常见:
[root@liqiang.io] dlv attach $PID --headless --api-version=2 --log --listen=:1234
这样 delve 服务器就起来了,然后继续下一步就是 Goland 连接调试。
第二步:在 Goland 中连接 delve 服务器
直接在 Goland 中配置 Host 和 Port 即可,然后在源代码中选择这个 “Go Remote” 调试器进行调试:
注意点:
- Go 代码需要加上编译选项:
-gcflags='all=-N -l'
,这个 Goland 也会提示你; - 不一定要用 Goland 调试,你也可以在本地执行
delve connect
来连接调试。
有时候我么需要远程调试golang程序,比如我们在macos写的代码,但是有时在linux上运行的,所以我们需要远程调试运行在linux系统的代码。另外一种情况是我们可以把goalng打包到docker 镜像中,代码跑在容器中同样可以调试。以goland为例。
remote debug
远程调试golang代码需要在运行代码的远程机器上按照delve,然后以delve运行要调试的程序。
- 编译
export CGO_ENABLED=0 GOOS=linux GOARCH=amd64
go build -gcflags='all -N -l' main.go
- install delve
go get go get -u github.com/derekparker/delve/cmd/dlv
- delve 运行程序
dlv --listen=:2345 --headless=true --api-version=2 exec ./main
-
goland 设置remote debug
host为远程主机ip 端口是刚才dlv设置的端口
屏幕快照 2018-07-03 下午3.57.11.png - debug
然后就像调试本地代码一样调试远程主机上的程序
docker debug
相关文章
- 【Docker】Docker容器中安装vim命令
- Docker - 在CentOS7中安装Docker
- Docker 文件存储驱动:Devicemapper 文件系统
- 【收藏】docker运行HUE
- docker history 27f1068ca9da --no-trunc查看镜像dockerfile内容
- 如何从ecs的pid定位到运行该进程的docker
- Docker搭建upload-labs教程
- ubuntu16.04 安装cuda9.0+cudnn7.0.5+tensorflow+nvidia-docker配置GPU服务
- Centos 6 安装Docker
- 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
- 【云原生 | Kubernetes 系列】Docker 面试题2则--取数据库连接数和docker-compose
- 81.第十七章 企业级容器技术docker -- Docker 数据管理、Docker网络管理(九)
- y24.第二章 Docker从入门到精通 -- docker镜像制作和管理(六)
- y21.第二章 Docker从入门到精通 -- Docker namespace(三)
- 【云原生之Docker实战】使用docker部署Pingvin Share文件共享平台
- 【云原生之Docker实战】使用Docker部署Traefik开源边缘路由器
- 【云原生之Docker实战】使用Docker部署Pichome个人相册系统
- 提交生成镜像 上传本地镜像 上传本地docker镜像 docker push上传镜像 docker commit上传容器
- 【云原生 • Docker】docker 环境搭建、docker 与容器常用指令大全
- Docker重学系列之高级数据卷配置
- Docker学习笔记17:docker实例之安装 Node.js、PHP、MySQL、Tomcat、Python、Redis、MongoDB、Apache
- Docker学习笔记16:docker实例之安装 Nginx
- Docker学习笔记11:docker使用之Dockerfile
- 【目标检测】Flask+Docker在服务器部署YOLOv5应用
- Docker学习笔记(五):Dockerfile生成历史查询、修改docker容器编码格式
- 云原生之使用Docker部署Dashdot服务器仪表盘