Go语言实战笔记(二十三)| Go 调试

栏目: C · 发布时间: 8年前

内容简介:Go语言实战笔记(二十三)| Go 调试

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号 flysnow_org 或者网站 http://www.flysnow.org/ ,第一时间看后续笔记。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。

对于任何 程序员 来说,调试程序是必备的技能。当我们的开发好的程序不符合我们的预期时,就需要我们通过调试它找到根本的原因,然后才可以有针对性的解决它。

调试是一种技能,不限于我们说的debug,这只是其中的一种,这是可以打断点的调试,除此之外,还有打印输出、日志记录、单元测试,这都可以称之为调试程序的手段。

打印输出

打印输出是一种比较传统的调试手段,我们可以把我们需要了解的变量值,执行的步骤等打印出来,来证明我们的猜测,以便解决问题。

func min(a,bint)int {
	//调试输出
	fmt.Println("a:",a,",b:",b)
	if a>b {
		return b
	} else {
		return a
	}
}

这是一个求最小值的函数,其中的 fmt.Println("a:",a,",b:",b) 就是我们加入的调试输出语句,这样我们就可以看到被比较的两个数的值,进而推测我们求最小值的算法是否正确。

打印输出不仅可以输出数值,还可以通过测试是否有输出来判断程序走了哪个逻辑,比如 if 语句,可能因为比较的错误,程序进入了另外一个 if 分支,那么我们就可以通过使用打印输出来判断。

日志输出

这个和打印非常像,但是他比打印多了很多信息,比如发生时间,发生的代码行数等,这种尤其在我们遇到线上问题的时候尤其有用。

比如我们监控到有一些部分用户的登陆一直失败,那么我们就就可以通过我们的日志文件里的日志,来定位时间、IP、用户、错误信息以及代码行等,最终找到问题,解决问题。关于日志的适用可以参考我以前的一篇文章 http://www.flysnow.org/2017/05/06/go-in-action-go-log.html ,这里就不再详细介绍了。

GDB调试

GDB是一款类Unix下的调试器,可以帮助我们调试可执行的程序,Go也对GDB进行了支持,所以我们也可以适用GDB调试 go 程序。

GDB是命令行的工具,在调试前,我们要先编译出我们需要调试的程序。使用 go build -gcflags "-N -l" main.go 即可进行编译。这里 -N -l 的标记是忽略编译器优化的意思,这样我们就可以更容易的调试程序。

调试通过 gdb main 启动,会进入一个GDB的调试界面,在这里面我们可以通过 list 命令查看代码,可以通过 b 命令对某一行打断点,可以通过 run 命令运行等,具体的可以参考GDB相关文档,这里不做详细介绍。

Delve调试

Delve是一个专门为调试Go程序而生的调试工具,它比GDB更强大,尤其时调试多goroutine高并发的Go程序。Delve的项目地址为 https://github.com/derekparker/delve ,它业绩大部分Go开发IDE选用的调试工具,比如Goland,后面我们再介绍。

Delve的使用和GDB非常像,都是命令行的工具,我们可以通过 dlv debug main.go 启动,然后就会进入一个交互界面,在这个界面里我们就可以进行调试操作了。

Delve的一些常用命令如下:

1.break 打断点

  1. continue 运行到断点处
  2. clear 删除断点
  3. list 显示源代码
  4. next 运行到下一行
  5. locals 打印局部变量
  6. print 打印一个变量或者表达式
  7. exit 退出调试

除此之外,还有很多,大家可以参考Delve的文档进行调试。

IDE调试

对于调试来说,命令行下的太麻烦了,所以为了 工具 效率,建议大家使用IDE进行调试,可见,逐行,效率高。

调试这个事情,只要可以解决我们的问题就好,有一个好的IDE可以帮助我们更高效率的调试,何乐不为呢。

这里推荐Goland,Jetbrains出品,老牌IDE厂商,非常方便。它家有很多IDE,而且快捷键都一样了,会了一个其他的也都会了。

IDE调试非常简单,点击工具栏的启动调试按钮,就可以调试了,记得提前打上断点。然后F8和F7配合就可以调试了,有专门的调试窗口可以看当前的局部变量,堆栈信息等,很简单,这里不做详细介绍了。

单元测试

单元测试也是一种调试的手段,我们可以模拟很多场景来验证我们逻辑的正确性,遇到问题,打印输出等,所以也是一种调试的手段,具体关于Go的单元测试可以参考 http://www.flysnow.org/2017/05/16/go-in-action-go-unit-test.html 这篇文章,这里不再详细介绍。

调试是手段,也算一种技能,以解决问题为目的,只要可以解决问题,就是好的调试手段。

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号 flysnow_org 或者网站 http://www.flysnow.org/ ,第一时间看后续笔记。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。

Go语言实战笔记(二十三)| Go 调试


以上所述就是小编给大家介绍的《Go语言实战笔记(二十三)| Go 调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Test Driven Development

Test Driven Development

Kent Beck / Addison-Wesley Professional / 2002-11-18 / USD 49.99

Quite simply, test-driven development is meant to eliminate fear in application development. While some fear is healthy (often viewed as a conscience that tells programmers to "be careful!"), the auth......一起来看看 《Test Driven Development》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具