网站:https://github.com/derekparker/delve
安装
go get github.com/go-delve/delve/cmd/dlv
启动和命令
dlv debug main.go
help 查看帮助
s 单步调试
si 单步调试汇编代码
so 跳出当前函数
n 下一个
b 加断点
bp 查看当前的所有断点
clear 清空断点
clearall 清空所有断点
t
args 打印函数的值
display 显示值
locals 当前本地的变量
print 打印值
regs 单步调试汇编时使用,打印寄存器的值
set 更新变量内存中的值
vars 打印变量的值
whatis 变量的类型
config 做配置
edit 编辑
exit 退出
堆栈的时候使用:
deferred
down
frame
stack
up
并发的时候使用:
goroutine
goroutines
thread
threads
dlv使用
(dlv) b main.main //下断点
Breakpoint 1 set at 0x4d6542 for main.main() F:/main.go:8
(dlv) r //运行
Process restarted with PID 285084
(dlv) c //执行到断点
> main.main() F:/main.go:8 (hits goroutine(1):1 total:1) (PC: 0x4d6542)
3: import (
4: "fmt"
5: "time"
6: )
7:
=> 8: func main() {
9: now := time.Now()
10: fmt.Println(now)
11: fmt.Println(now.Unix())
12: //模板 占位
13: //年 => 2006
(dlv) s //下一步
> main.main() F:/main.go:9 (PC: 0x4d6559)
4: "fmt"
5: "time"
6: )
7:
8: func main() {
=> 9: now := time.Now()
10: fmt.Println(now)
11: fmt.Println(now.Unix())
12: //模板 占位
13: //年 => 2006
14: //月 => 01
(dlv) s //下一步
> time.Now() E:/time.go:1093 (PC: 0x4bccda)
1088: // we avoid ever reporting a monotonic time of 0.
1089: // (Callers may want to use 0 as "time not set".)
1090: var startNano int64 = runtimeNano() - 1
1091:
1092: // Now returns the current local time.
=>1093: func Now() Time {
1094: sec, nsec, mono := now()
1095: mono -= startNano
1096: sec += unixToInternal - minWall
1097: if uint64(sec)>>33 != 0 {
1098: return Time{uint64(nsec), sec + minWall, Local}
(dlv)locals //当前的变量
(dlv)print nums //当前nums的值
(dlv)args //当前的参数
(dlv)so //跳出当前函数
(dlv)b main.go:9 //第9行加断点
(dlv)clear //删除断点