对于Java或微软系的程序员,可能都会觉得IDE调试工具很爽。Java的IDE和微软的Visual Studio 确实很强大(当然,貌似 Mac 下的 Xcode 调试也很牛),很多程序员应该很依赖这些IDE。
不过,对于 PHP/Python 这样的脚本语言,大部分这类程序员应该都不用调试工具的,一般都是打 log,而且习惯了之后,你会发现效率也挺快。
对于 Go,属于编译型语言,不是脚本语言,而且强大的 GDB 支持调试 Go 程序。似乎 Go 程序的调试工具不是问题。然而,Go程序大部分时候并不适合使用 GDB 调试,主要原因当然是 Go 天生的并发性,并发情况下,断点调试和实际运行会有差别,可能不是bug的,调试会成为bug;是bug的,调试不出来;另一方面,GDB这种命令行式的调试工具,可能大部分人使用不习惯。
因此,Go 程序的调试更多时候是跟 PHP 这样的语言一样,采用记日志的方式,可以记录 Debug 日志。
当然,GDB 也不是没有用处,个人觉得,深入学习 Go 的时候,可以借助 GDB,看看 Go 内部是怎么实现的;另一方面,Go 开发者们会使用 GDB 调试编译器 bug 和 runtime bug。
golang-china googlegruop 关于 Go 程序的调试讨论:
sha da 问:那广大的go从业者如何调试程序呢?
来自 minux:printf debugging. gdb一般只在调试编译器bug和runtime bug的时候用。
来自 Monnand:单元测试+打印log。相信我,一个有着很高单元测试覆盖率的库是非常容易维护和管理的。调试器什么的真的不好用——尤其是在支持多个并发单元的语言上。
来自 李四保:一直用日志,最近开始用go test,偶尔会使用go的一些测试工具。查看系统协程运行情况。一直没学会怎么用gdb,也很奇怪不用debug大部分问题居然都可以快速解决,复杂度高的c++可是一个问题有可能要查好几天。这或许就是go强大的地方吧。
有疑问加站长微信联系(非本文作者)