跳到主要内容

delve调试器

简介

Go语言支持GDB、LLDB和Delve调试器,GDB是最早支持的,而Delve是专为Go语言设计开发的调试器。

项目仓库地址:https://github.com/go-delve/delve

安装

Go 1.16之后

go install github.com/go-delve/delve/cmd/dlv@latest

验证,查看版本

dlv version

基础使用

  1. 创建一个go项目,名为tmpgo
mkdir tmpgo
cd tmpgo
go mod init tmpgo
  1. 添加文件main.go,写入以下内容
package main

import "fmt"

func main() {
s := "hello world"
fmt.Println(s)
}
  1. tmpgo项目的根目录下运行delve
dlv debug tmpgo
  1. 常用操作
命令缩写说明示例示例说明
helph查看所有可用命令,使用参数可查看指定命令的帮助help list查看list命令的帮助
listl查看源码,查看断点处的源码list main.main查看main.main函数的源代码
breakb设置断点b main.main为main.main函数添加断点
b demo.go:7在demo.go文件的第7行添加断点
breakpointsbp查看所有断点
nextn逐行执行
continuec运行直到遇到断点
clear清除断点
steps跳进调用的函数
stepoutso跳出调用的函数
printp打印变量的值p s查看变量s的值

补充

如果要对二进制程序进行调试,编译的时候需要添加参数-gcflags=all="-N -l"以禁止编译器的优化与内联,示例

go build -o ginapp -gcflags=all="-N -l" main.go

vscode远程开发调试

  1. 在远程服务器上运行dlv
# 进入项目根目录
cd tmpgo
# 运行dlv
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient --check-go-version=false debug
  1. 在vscode上编辑调试的Launch.json文件。大部分内容是vscode自行生成的,主要加了行"apiVersion": 2
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Connect to server",
"type": "go",
"request": "attach",
"mode": "remote",
"remotePath": "${workspaceFolder}",
"port": 2345,
"host": "127.0.0.1",
"apiVersion": 2
}
]
}
  1. 在vscode打断点调试即可。

参考