GO成神之路:正确的进行GO源码调试|Go主题月

2,895 阅读2分钟

论Debug的重要性

从小白到资深菜鸟,除了复制、粘贴之外,最有感触的就是deubg的过程,通过debug不仅可以学习到一些书本上没有的内容,而且也可以进一步提升自己的逼格。只要掌握debug这个技能,在诡异的问题也能找到解决办法。

有效的Debug方式

作为时下最火的一门语言,竟然很难找到一篇关于GO源码调试的高效方式,作为一个coder老兵,我觉得是时候分享一篇关于Go的且极其有用的Debug技能了(该技能也是笔者从其他大神那里学来,仅此记录总结一下)。

一款合适的IDE尤其重要

  • 针对新手或学习,这里我推荐GoLand作为第一开发工具
  • 针对工作开发,我推荐Visual Studio Code作为第一开发工具

除了上面两款外还有一款值得关注的是LiteIDE,在2013年附近LiteIDE的确是一款无法被替代的好工具

Visual Studio Code

优点:

  1. 相对轻量级
  2. 支持ssh等远程开发
  3. 多语言开发尤为方便
  4. 安装对应插件后调式也不算麻烦

缺点:

  1. 针对Go开发延迟明显
  2. 无法智能导入Go模块
  3. 无法调式复杂的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对应的项目

其实代码很简单,这里用一张图概括了:

2vv0ozfeys.png

如果启动调试的时候没有办法进入断点位置,点击如下按钮可以解决

1inq2rghex.png

最后

以上就是我掌握的一点点Go的源码调试方式,希望对各位看官的工作代来一点点的帮助,如果有什么不正确,或者需要详细补充的地方,欢迎持续拍砖。