如何在ubuntu上调试golang代码
导读:在 Ubuntu 上调试 Go 代码的高效方法 一、准备环境 安装 Go 工具链:建议 Go 1.19+,确保命令行可运行 go version。 安装调试器 Delve(推荐):执行 go install github.com/go-d...
在 Ubuntu 上调试 Go 代码的高效方法
一、准备环境
- 安装 Go 工具链:建议 Go 1.19+,确保命令行可运行 go version。
- 安装调试器 Delve(推荐):执行 go install github.com/go-delve/delve/cmd/dlv@latest,并将 $GOPATH/bin 加入 $PATH,以便全局使用 dlv。
- 可选 IDE:安装 VS Code 并添加官方 Go 扩展,便于图形化断点、变量与调用栈查看。
二、使用 Delve 命令行调试
- 基本流程
- 在代码目录执行 dlv debug,进入调试会话;
- 设置断点:如 break main.main 或 break main.go:10;
- 运行到断点:continue;
- 单步执行:next(不进入函数)/ step(进入函数);
- 打印变量:print variable;
- 查看调用栈:stack;
- 退出:quit。
- 示例
# 进入调试会话 dlv debug # 设置断点 (dlv) break main.main (dlv) break main.go:20 # 运行 (dlv) continue # 单步与打印 (dlv) next (dlv) print sum # 退出 (dlv) quit - 常用命令速查
- b/break:设置断点(函数名或文件:行号)
- c/continue:继续运行
- n/next:下一步(不进入函数)
- s/step:步入函数
- p/print:打印表达式/变量
- bt/stack:打印调用栈
- l/list:列出源码
- q/quit:退出调试器
以上流程与命令适用于日常命令行调试场景。
三、使用 VS Code 图形化调试
- 安装 VS Code 的 Go 扩展,首次使用会提示安装依赖调试工具(会自动安装 Delve)。
- 生成调试配置:在 VS Code 中按 F5 或“运行和调试”面板创建 launch.json,常用配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "mode": "auto", "program": "${ workspaceFolder} " } ] } - 调试步骤:在代码行号左侧点击设置断点,选择配置后按 F5 启动,即可在调试侧栏查看变量、调用栈并单步执行。
四、进阶与常见问题
-
编译优化导致变量不可见
调试时请关闭编译器优化与内联,保证断点与源码位置一致、变量可打印:- 命令行构建用于调试:go build -gcflags “all=-N -l”
- VS Code 预构建任务示例(在 tasks.json 中):
在 launch.json 中使用 mode: exec 并指定 program 为编译产物,配合 preLaunchTask 执行构建。{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "go_build_debug", "command": "go", "args": [ "build", "-gcflags", "all=-N -l", "-o", "${ workspaceFolder} /app_debug", "${ workspaceFolder} /main.go" ] } ] }
-
附加到已运行进程失败(ptrace 限制)
在部分 Ubuntu 上,普通用户默认不能 ptrace 附加进程。可修改内核参数:# 临时放宽(重启失效) echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope # 永久生效(写入配置并重启) echo "kernel.yama.ptrace_scope = 0" | sudo tee /etc/sysctl.d/10-ptrace.conf sudo sysctl -p /etc/sysctl.d/10-ptrace.conf注意:放宽 ptrace 可能带来安全风险,仅在可信环境下使用。
-
性能问题定位(pprof)
对于 CPU/内存瓶颈,可使用 net/http/pprof:- 在代码中导入 _ “net/http/pprof” 并启动 http.ListenAndServe(“localhost:6060”, nil);
- 采集 30 秒 CPU 数据:curl http://localhost:6060/debug/pprof/profile?seconds=30 > profile.pprof;
- 分析:go tool pprof profile.pprof,可用 top / list / web 等命令查看热点。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在ubuntu上调试golang代码
本文地址: https://pptw.com/jishu/751186.html
