go调试利器-delve

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

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

我们可以登陆官网上进行查看 -- https://github.com/go-delve/delve --
[图片上传失败...(image-4cbbf5-1593445503271)]
[图片上传失败...(image-549464-1593445503271)]
对于delve在官方网站上有比较详细的说明,而且安装情况也是非常简单。我们只需要点击installation中的windows。
[图片上传失败...(image-678a30-1593445503271)]
注意:如果在模块模式下使用Go,则必须在模块目录之外执行此命令,否则Delve将作为依赖项添加到项目中。

另外,如果尚未设置,则必须将%GOPATH%\ bin目录添加到PATH变量中。
[图片上传失败...(image-f6bfbd-1593445503271)]
当我们进行下载成功后需要添加到我们的环境变量中,
[图片上传失败...(image-52d2db-1593445503271)]
当然也可以通过%GOPATH%\bin来进行添加即可。所以对于delve的安装按照官方的文档进行下去还是非常方便和快捷。进行完安装后我们就可以开始我们实战演练部分,对于我们的代码进行调试。
对于delve的常用命令我们可以通过dlv –-help 来进行了解
[图片上传失败...(image-2f3936-1593445503271)]
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
[图片上传失败...(image-90bb4d-1593445503271)]
然后我们只需要在goland中进行配置一下即可。
[图片上传失败...(image-187ba7-1593445503271)]
然后添加相应的dlv.path为你gopath下的dlv.exe路径,然后重启即可
[图片上传失败...(image-60e46d-1593445503271)]
实操演练:
这里我准备了一个简单的项目进行调试
[图片上传失败...(image-9afa09-1593445503271)]
如图所示可以看到这个是一个非常简单的web服务器代码
[图片上传失败...(image-3a766b-1593445503271)]
然后我们进入到相应dos界面执行dlv debug main.go
[图片上传失败...(image-5597f1-1593445503271)]
我们可以用sources来进行查看源文件。
[图片上传失败...(image-f1c781-1593445503271)]
以下是给大家罗列了一些关于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 代码位置:行数 进行标注。
[图片上传失败...(image-3f2a8d-1593445503271)]

标注完成后 直接输入c 可以进行查看源代码。
[图片上传失败...(image-7f59a5-1593445503271)]
使用next 可以进行下一步,进行调试。
[图片上传失败...(image-a45041-1593445503271)]
[图片上传失败...(image-4e9247-1593445503271)]
当然针对更多的dlv命令还需要小伙伴们下来之后进行多多尝试才行。相互学习,共同进步,我是小栈君,我们下期再见!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344