go调试利器delve

6次阅读

共计 2703 个字符,预计需要花费 7 分钟才能阅读完成。

大家好,我是小栈君,好久没更新文章了,确实抱歉!因为工作变动等原因导致最近拖更严重,但是请大家放心,我会一如既往的为大家带来自己的原创文章,供大家相互交流和学习,一起成长。今天小栈君带来的分享是 go 语言的调试利器 DELVE。

关于 delve 工具的介绍,这里简单给大家介绍一下。delve 在 go 项目及应用的开发中可以用来追踪程序中的异常代码,也可以通过打日志的方式追查问题,但是更重要也是非常厉害的一点,就是 delve 可以直接分析程序执行的情况。这一点在后期或线上的问题排查中无疑是提供了一个非常大的便捷。

我们可以登陆官网上进行查看 — https://github.com/go-delve/d… —


对于 delve 在官方网站上有比较详细的说明,而且安装情况也是非常简单。我们只需要点击 installation 中的 windows。

注意:如果在模块模式下使用 Go,则必须在模块目录之外执行此命令,否则 Delve 将作为依赖项添加到项目中。

另外,如果尚未设置,则必须将%GOPATH% bin 目录添加到 PATH 变量中。

当我们进行下载成功后需要添加到我们的环境变量中,

当然也可以通过 %GOPATH%bin 来进行添加即可。所以对于 delve 的安装按照官方的文档进行下去还是非常方便和快捷。进行完安装后我们就可以开始我们实战演练部分,对于我们的代码进行调试。
对于 delve 的常用命令我们可以通过 dlv –-help 来进行了解

PS:踩坑日记:很多小伙伴也有反馈即使我们安装完 delve 在 goland 中也无法使用我们的 delve 来进行代码的调试,因为 goland 中出现

Version of Go is too old for this version of Delve (minimum supported version 1.13, suppress this error with --check-go-version=false 

要解决这个方法很简单,我们在 gopath 中安装好 delve 后会生成 bin 目录,在 bin 文件夹中会有 dlv.exe

然后我们只需要在 goland 中进行配置一下即可。

然后添加相应的 dlv.path 为你 gopath 下的 dlv.exe 路径,然后重启即可

实操演练:
这里我准备了一个简单的项目进行调试

如图所示可以看到这个是一个非常简单的 web 服务器代码

然后我们进入到相应 dos 界面执行 dlv debug main.go

我们可以用 sources 来进行查看源文件。

以下是给大家罗列了一些关于 dlv 的常用命令。方便大家查看

The following commands are available:
    args ------------------------ 打印函数参数.
    break (alias: b) ------------ 设置断点.
    breakpoints (alias: bp) ----- 输出活动断点的信息.
    call ------------------------ 恢复进程,注入一个函数调用(还在实验阶段!!)
    clear ----------------------- 删除断点.
    clearall -------------------- 删除多个断点.
    condition (alias: cond) ----- 设置断点条件.
    config ---------------------- 修改配置参数.
    continue (alias: c) --------- 运行到断点或程序终止.
    deferred -------------------- 在延迟调用的上下文中执行命令.
    disassemble (alias: disass) - 反汇编程序.
    down ------------------------ 将当前帧向下移动.
    edit (alias: ed) ------------ 在 $DELVE_EDITOR 或 $EDITOR 中打开你所在的位置
    exit (alias: quit | q) ------ 退出调试器.
    frame ----------------------- 设置当前帧,或在不同的帧上执行命令.
    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 ----------------------- 打印类型列表
    up -------------------------- 向上移动当前帧.
    vars ------------------------ 打印包变量.
    whatis ---------------------- 打印表达式的类型.

在命令前键入 help 来获得命令的完整文档,如 help goroutine
接下来就是进行断点的标注,我们可以使用 b 代码位置: 行数 进行标注。

标注完成后 直接输入 c 可以进行查看源代码。

使用 next 可以进行下一步,进行调试。


当然针对更多的 dlv 命令还需要小伙伴们下来之后进行多多尝试才行。相互学习,共同进步,我是小栈君,我们下期再见!

正文完
 0