Go调试工具Delve
目录
安装
delve/Documentation/installation · derekparker/delve · GitHub提供了所有操作系统平台上安装Delve的说明,
用法
可以使用Delve调试Go程序
Delve支持远程调试、命令行调试、集成环境调试
- 远程调试
 
如果程序运行在服务器,我们又没有办法查看到程序的源码,我们可以通过远程调试的方式进行
- 在服务器上查看到程序的pid
 
ps -ef|grep <program>
- 执行attach命令
 
dlv attach <PID> --headless --api-version=2 --log --listen=:8081
- 在本机执行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