论Debug的重要性
从小白到资深菜鸟,除了复制、粘贴之外,最有感触的就是deubg的过程,通过debug不仅可以学习到一些书本上没有的内容,而且也可以进一步提升自己的逼格。只要掌握debug这个技能,在诡异的问题也能找到解决办法。
有效的Debug方式
作为时下最火的一门语言,竟然很难找到一篇关于GO源码调试的高效方式,作为一个coder老兵,我觉得是时候分享一篇关于Go的且极其有用的Debug技能了(该技能也是笔者从其他大神那里学来,仅此记录总结一下)。
一款合适的IDE尤其重要
- 针对新手或学习,这里我推荐GoLand作为第一开发工具
- 针对工作开发,我推荐Visual Studio Code作为第一开发工具
除了上面两款外还有一款值得关注的是LiteIDE,在2013年附近LiteIDE的确是一款无法被替代的好工具
Visual Studio Code
优点:
- 相对轻量级
- 支持ssh等远程开发
- 多语言开发尤为方便
- 安装对应插件后调式也不算麻烦
缺点:
- 针对Go开发延迟明显
- 无法智能导入Go模块
- 无法调式复杂的Go源码
Goland
有钱人的首选,除了占用内存,收费外几乎找不到其它槽点,重点是Debug功能及其强大。
基于Goland的源码调式
第一步,找到代码入口点
下面的方案是从某个地方找到答案,具体出处记不得了
# 编译你的代码并导出程序集信息
go tool compile -S main.go >> main.txt
打开main.txt,找到以下重要行,聪明的你一眼就能看出第7行代码对应的CALL指令
# 主要代码
0x008f 00143 (main.go:7) CALL runtime.fastrand(SB)
其中runtime.fastrand就是改行代码的入口函数,我们只需要从runtime包中找到对应的函数名打上断点即可,就是这么简单。
第二步,用Goland打开main.go对应的项目
其实代码很简单,这里用一张图概括了:
如果启动调试的时候没有办法进入断点位置,点击如下按钮可以解决
最后
以上就是我掌握的一点点Go的源码调试方式,希望对各位看官的工作代来一点点的帮助,如果有什么不正确,或者需要详细补充的地方,欢迎持续拍砖。