美文网首页
快看!你的 golang 程序在干什么不可描述的事情

快看!你的 golang 程序在干什么不可描述的事情

作者: 煒weelion | 来源:发表于2018-01-05 15:48 被阅读1015次

0x0 起因

在一次优化中,增加了按 seller 自动启动 goroutine 的功能,维护着一个 seller map 将协程 ID 都存入其中,发现这个 seller 没有 goroutine 就自动启动一个。 当时因为 map 没有加同步锁,而且是 goroutine 使用 fmt.Print 调试,各种几千个重复 print 真是受够了(谁试谁知道),一个正常的人马上得精神病。是时候祭出大杀器 VSCode Debug 工具。

0x1 给 VSCode 安装 debug 包

Debug 估计大家不用陌生,就是通过设置断点查看代码的执行情况,在 golang 有一个 debug 包 delve 可以很方便的结合 VSCode 调试。

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

0x2 设置断点

假如我们要 debug 下面这段代码

    package main
    import "fmt"
    var a string
    func init() {
        a = "a string"
    }
    func main() {
        b := "b string"
        fmt.Printf("%s\n%s", a, b)
        for i := 1; i < 5; i++ {
            fmt.Println(i)
        }
        fmt.Println("Done")
    }

把断点打在函数起始行

加断点

0x3 开始调试

按下 F5 启动调试(或者找到菜单 - 调试 - 启动调试), 调试开始你在 VSCode 上方能看到一个调试控制台,

调试控制台

分别是:

  • 继续:继续运行直到遇到下个断点
  • 单步跳过:跳过此行
  • 单步调试:代码往下执行,深入调试(可跨文件)
  • 单步跳出:跳出当前调试函数
  • 重启:重新启动调试
  • 停止:停止调试
完整调试

0x4 查看调试信息

上面动图已经完成了完整的一次简单调试,那么通过上面的调试我们可以看到什么样的信息呢?

  • 局部变量

当前作用域的所有局部变量。

局部变量
  • 全局变量

在监视面板添加你需要监视的全局变量。

全局变量
  • 堆栈信息

暂时跳过,里面信息还看不懂。

堆栈信息
  • 调试信息。
调试信息

0x5 高级功能

  • 条件断点

顾名思义,当达到指定条件之后才会触发断点,貌似 golang 暂时还不支持下次补上

0x6 尾声

Cool,恭喜你。学会了偷看你的 golang 脚本干的羞羞事情,那么其他语言遇到了类似情况,你已经知道怎么做了。如果你有 Debug 新发现,欢迎更新此文。

相关文章

  • 快看!你的 golang 程序在干什么不可描述的事情

    0x0 起因 在一次优化中,增加了按 seller 自动启动 goroutine 的功能,维护着一个 seller...

  • Golang cannot assign to arrays i

    问题描述 今天在运行golang程序时出现编译错误cannot assign to infoMap[osd.Osd...

  • 高质量子程序3——一个好的名字

    1、如何选择一个能够在恰当的抽象层次上描述子程序的名字? 描述子程序所做的所有事情,子程序的名字应当描述其所有的输...

  • 不可描述的

    写于2017年1月,满天不可描述 生活不止是眼前的苟且 还有他妈的远方的苟且 今天是难以言表的苟且 明天是不可描述的苟且

  • 面试总结

    笔试题 1.如何对Golang程序做性能分析和调优?如何排查Golang程序的内存泄漏? 1)使用golang的工...

  • 不可描述的事情真的无处诉说

    当我知道了一些不可描述的事情之后 我真的很懵比 在这之前我知道人心复杂 但没想到会复杂的如此不堪 我不知道我该如何...

  • Golang:Delve版本太低无法Debug

    问题描述 最近把Golang升级到了1.14,突然发现Goland编辑器没法Debug调试程序了,会报出如下错误:...

  • 在英国不可描述的日常(一)

    姐姐已经暂居英国五百天了,每周的电话和图片分享已经成了我们家雷打不动的习惯。她就是我那篇《那些高考失利的人,后来怎...

  • 忽然感觉好想抽烟

    快看,快看,那个女孩在抽烟! 快看,快看,那个女孩在抽烟! 自从你走后,我发现在网吧的工作越发无聊了。 自从你走后...

  • 前端程序员的日常与心酸

    程序员一般待遇优厚,工作自由,那么程序员的周末在干什么,据统计 程序员为什么没对象?笨啊,你在大学干什么了啊,当时...

网友评论

      本文标题:快看!你的 golang 程序在干什么不可描述的事情

      本文链接:https://www.haomeiwen.com/subject/lxrsnxtx.html