likes
comments
collection
share

Golang 开发调试工具 Delve

作者站长头像
站长
· 阅读数 55

hello,大家好,我是张张,「架构精进之路」公号作者。

一、为什么需要Debug?

  • 不侵入程序,直接调试代码

  • 更直观得观察程序运行过程

  • 方便定位一些疑难问题,例如死循环、僵尸进程等

  • 有助于阅读Go的底层代码

二、Go 的Debug

在Go语言的学习过程中,我们常用调试PHP的方法对某个变量进行print或者log输出,虽然这样的操作可以解决大部分的程序问题。但是,如果面对goroutine这样的调试输出,又该如何进行呢?

Go 语言目前的调试器有如下几种:

  • GDB 最早期的调试工具,现在用的很少。

  • LLDB macOS 系统推荐的标准调试工具,单 Go 的一些专有特性支持的比较少。

  • Delve 专门为 Go 语言打造的调试工具,使用最为广泛。

Delve 是 Go 程序的源代码级的调试器,那调试工具dlv在开发工作中非常实用,怎么装、怎么用?

本文带你快速上手dlv调试工具来调试 Go 程序,Let's go!

三、安装与配置

1、下载安装

Golang 开发调试工具 Delve

根据自身机器应用环境,按照文档安装即可。

2、常用命令

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

3、编辑器debug

使用 GoLand 进行调试也很简单,都是图形化界面,加断点即直接点击行号,开始调试,点击右上角的小甲壳虫即可。

IDE 中的操作流程如下:

  1. 左键加断点

  2. 以debug模式启动进程

  3. 效果图

Golang 开发调试工具 Delve

四、应用示例

演示示例:

#1debug一个main.go程序
dlv  debug json.go

#2、在main包里的main函数入口打断点
breakbmain.main 

#3、继续运行,直到断点处停止
continuec

#4、单步运行
nextn

#5、打印local variables
locals 

#6、打印一个变量或者表达式
printp

#7Restart Process
restartr

----------------------------------------
bp 断点
bt 堆栈
grs 协程s
gr 当前协程
gr 协程id 切换协程
r 重启进程

以上是常用的调试命令,还有一些command,可以执行dlv help查看具体用法!

·END·

希望今天的讲解对大家有所帮助,谢谢!

Thanks for reading!

作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长。 关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。

转载自:https://juejin.cn/post/7371306814309056549
评论
请登录