Delve调试指南

1.安装delve

    go get -u github.com/go-delve/delve/cmd/dlv

详见:https://github.com/go-delve/delve/blob/master/Documentation/installation/linux/install.md

2.使用delve

使用调试器进行编译需要先产生一个支持调试的版本。

2.1 编译调试一步走

dlv debug,该方式下编译成功后会直接进入调试模式(编译参数可以通过–build-flags 指定):

1

2.1.1 编译当前目录下的main包

dlv debug

2.1.2 编译非当前目录下的main包

假定github.com/me/foo/cmd/foo是我们的main包路径,delve调用方式为 dlv debug github.com/me/foo/cmd/foo

2.2 编译+delve调试

delve支持先直接调试预先编译好的二进制,但是go 1.10及以上建议开启-gcflags=“all=-N -l” 编译选项进行编译,否则优化后的二进制可能会各种调试问题。

程序运行参数可以以--分隔,后面紧跟需要传入的参数。

a. 使用go build或项目特定的方式进行编译

b. dlv exec <path/to/binary>。

2

2.3 简单使用介绍

  1. 打断点:break packageName.funcName

    这里我们对main包里面的dealSignal函数设置断点。
    3

  2. 运行: continue
    delve没有run命令,直接服用continue命令开始调试。如下图,程序运行后停在了dealSignal函数,并显示了代码上下文。
    4

  3. 单步运行:next(step over)
    运行当前栈中下一行,可以看到下一条运行语句的指针已经指向49行。
    5

  4. 打印变量:print
    打印当前堆栈变量,我们这里打印的是一个channel,可以看到delve把channel的成员变量全都递归打印出来了,并且附带成员名称。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WJgQb5OM-1678759503719)(/Users/zsh/Desktop/6.png)]

  5. 帮助命令:help
    其他功能详见help。
    7

2.4 相关链接

  • 更多使用方式 https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv.md
  • 编辑器及ide集成方案 https://github.com/go-delve/delve/blob/master/Documentation/EditorIntegration.md

猜你喜欢

转载自blog.csdn.net/zhw21w/article/details/129518306
今日推荐