安装

delve/Documentation/installation · derekparker/delve · GitHub提供了所有操作系统平台上安装Delve的说明,

用法

可以使用Delve调试Go程序

Delve支持远程调试、命令行调试、集成环境调试

  • 远程调试

如果程序运行在服务器,我们又没有办法查看到程序的源码,我们可以通过远程调试的方式进行

  1. 在服务器上查看到程序的pid

ps -ef|grep <program>

  1. 执行attach命令

dlv attach <PID> --headless --api-version=2 --log --listen=:8081

  1. 在本机执行connect命令

dlv connect <server_ip>:8081

如果本机dlv退出,远程的dlv也会退出

本机dlv没有启动,远程dlv直接关闭,会导致进程退出

本机dlv退出的时候,会询问是否关闭调试进程的pid

  • 命令行调试

dlv debug

具体可以查看Getting started with Delve该文档,有比较详细的说明

  • 集成环境调试

[Chinese]delve · nebulasio/wiki Wiki · GitHub

常用命令说明

命令 描述
args 打印函数参数
break (alias: b) 设置一个断点
breakpoints (alias: bp) 打印活动断点信息
clear 删除断点
clearall 删除所有的断点
condition (alias: cond) 设置断点条件
config 改变配置参数
continue (alias: c) 运行到断点或程序终止
exit `(alias: quit q)`
funcs 打印函数列表
goroutine 显示或更改当前goroutine
goroutines 列出程序的全部goroutines
help (alias: h) 打印出帮助信息
list `(alias: ls l)`
locals 打印局部变量
next (alias: n) 跳到下一行
on 在遇到断点时执行一个命令
print (alias: p) 表达式
regs 打印CPU寄存器的内容
restart (alias: r) 重启进程
set 更改变量的值
source 执行包含delve命令列表的文件
sources 打印源文件列表
stack (alias: bt) 打印堆栈跟踪信息
step (alias: s) 单步执行程序
step-instruction (alias: si) 单步单个执行cpu指令
stepout 退出当前函数
thread (alias: tr) 切换到指定的线程
threads 打印每一个跟踪线程的信息
trace (alias: t) 设置跟踪点
types 打印类型列表
vars 打印某个包内的(全局)变量
whatis 打印表达式的类型

完整的命令说明:delve/Documentation/cli · derekparker/delve · GitHub

参考网址

delve/Documentation · derekparker/delve · GitHub