Delve 是专为 Go 语言设计的开源调试器,由 Derek Parker 于 2014 年发起,命令行工具名为 dlv。它深入理解 goroutine、channel 等 Go 运行时概念,是 VS Code 与 GoLand 等 IDE 调试 Go 程序的底层引擎。

| 类型 | 调试器 |
| 面向语言 | Go |
| 作者 | Derek Parker |
| 首次发布 | 2014 年 |
| 许可证 | MIT |
Delve是 Go 语言专用的调试器,目标是为 Go 提供一个简单、全功能、理解其运行时特性的调试工具。项目由美国开发者德里克·帕克(Derek Parker)于 2014 年发起并开源,命令行入口为 dlv,现已成为 Go 生态事实上的标准调试器。
通用调试器(如 GDB)虽能加载 Go 程序,但对 goroutine 调度、分段栈、接口值等 Go 特有机制支持有限,体验不佳。Delve 从一开始就针对 Go 的运行时与类型系统设计,能正确列出并切换成千上万个 goroutine、解析 Go 的数据结构,并与 go build 的编译产物无缝配合。VS Code 的 Go 扩展与 JetBrains GoLand 的调试功能,底层都由 Delve 驱动。
Delve 覆盖 Go 开发的各种调试需求:本地开发时在 IDE 中断点单步;线上排障时 attach 到运行中的服务检查状态;容器与 Kubernetes 环境中以远程模式调试;崩溃后配合核心转储做事后分析。调试时通常以 -gcflags all=-N -l 关闭优化与内联,保证变量与断点位置准确。
问:为什么调试时有些变量显示为已优化?答:编译器优化会消除或寄存器化变量,构建时加上 -gcflags all=-N -l 关闭优化和内联即可完整查看。
问:调试 Go 该用 Delve 还是 GDB?答:优先 Delve。Go 官方文档也指出 GDB 对 Go 支持不完善,Delve 才能正确处理 goroutine 与 Go 类型。

| 类型 | 调试器 |
| 面向语言 | Go |
| 作者 | Derek Parker |
| 首次发布 | 2014 年 |
| 许可证 | MIT |
登录 后参与讨论
暂无讨论,来发表第一条评论吧