Go delve 调试工具介绍

发布时间: 更新时间: 总字数:1215 阅读时间:3m 作者:IP:上海 网址

delve是 Go 编程语言的调试器。

介绍

  • Delve 的目标是为 Go 提供一个简单、功能齐全的调试工具
  • Delve 易于调用和使用

安装

# Install the latest release:
$ go install github.com/go-delve/delve/cmd/dlv@latest

# Install at a specific version or pseudo-version:
$ go install github.com/go-delve/delve/cmd/dlv@v1.7.3
  • help
dlv --help ...
  • debug help
dlv debug . ...

使用

package main

import (
	"fmt"
)

func tribonacci(n int) int {
	if n < 2 {
		return n
	}
	if n == 2 {
		return 1
	}

	cache := make([]int, n+1)
	cache[0], cache[1], cache[2] = 0, 1, 1
	for i := 3; i <= n; i++ {
		cache[i] = cache[i-1] + cache[i-2] + cache[i-3]
	}
	return cache[n]
}

func main() {
	fmt.Println(tribonacci(15))
}

debug

使用的命令

  • break(b) 设置断点
    • b xxx/databases/mysql.init.0
  • breakpoints(bp) 查看断点
  • clearall 清理断点
  • continue(c) 执行到下一个断点
  • next(n) 下一步
  • set 设置变量
  • funcs <func-name> 搜索函数
  • reset(r) 重置
  • step(s) 进入函数
  • list(l) 查看文件
    • l <file>.go:n
  • exit 退出
$ dlv debug .
Type 'help' for list of commands.
(dlv) b main.main
Breakpoint 1 set at 0x10ae96e for main.main() ./main.go:23
(dlv) l main.go:15
Showing /Users/xiexianbin/Downloads/abc/main.go:15 (PC: 0x10ae78f)
    10:		}
    11:		if n == 2 {
    12:			return 1
    13:		}
    14:
    15:		cache := make([]int, n+1)
    16:		cache[0], cache[1], cache[2] = 0, 1, 1
    17:		for i := 3; i <= n; i++ {
    18:			cache[i] = cache[i-1] + cache[i-2] + cache[i-3]
    19:		}
    20:		return cache[n]
(dlv) b main.go:18
Breakpoint 2 set at 0x10ae82f for main.tribonacci() ./main.go:18
(dlv) bp
Breakpoint runtime-fatal-throw (enabled) at 0x437960,0x437a60 for (multiple functions)() <multiple locations>:0 (0)
Breakpoint unrecovered-panic (enabled) at 0x437dc0 for runtime.fatalpanic() /usr/lib/go-1.20/src/runtime/panic.go:1141 (0)
	print runtime.curg._panic.arg
Breakpoint 1 (enabled) at 0x49cb0a for main.main() ./main.go:23 (0)
Breakpoint 2 (enabled) at 0x49c9b9 for main.tribonacci() ./main.go:18 (0)
(dlv) c
> main.main() ./main.go:23 (hits goroutine(1):1 total:1) (PC: 0x49cb0a)
    18:			cache[i] = cache[i-1] + cache[i-2] + cache[i-3]
    19:		}
    20:		return cache[n]
    21:	}
    22:
=>  23:	func main() {
    24:		fmt.Println(tribonacci(15))
    25:	}
(dlv) n
> main.main() ./main.go:24 (PC: 0x49cb18)
    19:		}
    20:		return cache[n]
    21:	}
    22:
    23:	func main() {
=>  24:		fmt.Println(tribonacci(15))
    25:	}
(dlv) s
> main.tribonacci() ./main.go:7 (PC: 0x49c8ca)
     2:
     3:	import (
     4:		"fmt"
     5:	)
     6:
=>   7:	func tribonacci(n int) int {
     8:		if n < 2 {
     9:			return n
    10:		}
    11:		if n == 2 {
    12:			return 1
(dlv) c
> main.tribonacci() ./main.go:18 (hits goroutine(1):1 total:1) (PC: 0x49c9b9)
    13:		}
    14:
    15:		cache := make([]int, n+1)
    16:		cache[0], cache[1], cache[2] = 0, 1, 1
    17:		for i := 3; i <= n; i++ {
=>  18:			cache[i] = cache[i-1] + cache[i-2] + cache[i-3]
    19:		}
    20:		return cache[n]
    21:	}
    22:
    23:	func main() {
(dlv) p i
3
(dlv) p n
15
...
(dlv) locals
cache = []int len: 16, cap: 16, [...]
i = 5
(dlv) set i = 2
(dlv) locals
cache = []int len: 16, cap: 16, [...]
i = 2
(dlv) clearall main.main
Breakpoint 1 cleared at 0x49cb0a for main.main() ./main.go:23
(dlv) funcs tribonacci
main.tribonacci
(dlv) exit
本文总阅读量 次 本站总访问量 次 本站总访客数