golang 如何远程调试服务

2024-08-23 10:03:20 +08:00
 ericcen
golang 如何远程调试服务,比如排 bug 、程序泄漏等,向大佬们取取经
2388 次点击
所在节点    Go 编程语言
9 条回复
nxcdJaNnmyF9O90X
2024-08-23 10:13:44 +08:00
字节开源了一共工具 类似于 althas
KaynW
2024-08-23 10:17:44 +08:00
Tanglok
2024-08-23 11:00:54 +08:00
Goland 不是有远程编译和调试.
griffinx
2024-08-23 13:35:12 +08:00
如果程序允许暂停,直接 ssh 连接上去用 delve debug 。但是大部分 bugs 通过 tracing ,logging 这些中间件,配合 pprof 已经可以诊断的比较好了,需要考虑你的服务是否已经支持了这些组件。

另外,可以尝试在本地环境复现问题,也是一个好的思路,不一定直接在远程(生产环境)的服务操作
xiaozirun
2024-08-23 14:28:43 +08:00
github.com/go-delve/delve
在 dockerFile 里:
RUN go install github.com/go-delve/delve/cmd/dlv@v1.22.1
# 构建 Go 应用程序
RUN go build -gcflags="-N -l" -o test .
# 声明服务端口
EXPOSE 8080 2345
# 指定容器启动命令
CMD ["dlv", "--listen=:2345", "--headless=true", "--api-version=2", "exec", "./test"]
远程上启动后在 goland 里配置下 go remote 就行了
aw2350
2024-08-23 14:47:25 +08:00
得看你们的业务复杂度以及架构模式。如果是 N 个微服务链路,本地起 N 个服务用生产的环境配置去定位问题,那也很痛苦,何况 N 个服务可能有 java 有 go 有 其他的玩意。。最好的办法还是做好链路追踪以及 pprof 或者 dlv
ny562kPWNJK9g86f
2024-08-23 15:32:08 +08:00
如果涉及到多个服务,那肯定要记录链路跟踪日志,这样方便定位问题。

https://t.me/+zvdA2a7KiMI3NmVl 全栈开发者交流群
Martens
2024-08-23 17:42:27 +08:00
一般服务器运行的 go 可执行文件都是编译优化和裁剪过的吧,不能直接调试。

楼上说的 dlv 支持本地和远程调试
ericcen
2024-08-24 11:16:22 +08:00
@xingjue 大佬,搜不到 go 的,可否说下名称

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1067166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX