在MacOS上使用gdb(cgdb)调试Golang程序

如果你在MacOS上使用GDB工具载入Golang程序时无法载入,这篇文章可以解决。本文不具体介绍调试的方法,网上的文章太多了就不赘述了。
cgdb使用的是gdb的内核,方法和原理试用本文。

问题分析

最近接触Go语言,看了慕课网的这篇文章,里面介绍的Go函数,有一种JavaScript的风格,把我弄迷糊了。记得刚接触JavaScript的时候,什么匿名函数自执行,弄的是晕头转性。决定使用调试器对这篇文章中的示例代码进行调试。

找了很多文章介绍GDB调试Golang程序的文章都不能载入。

Type "apropos word" to search for commands related to "word"...
Reading symbols from gen...(no debugging symbols found)...done.
Loading Go Runtime support.

应该是这些文章的作者都用的Linux操作系统吧,在我这里不起作用。Go语言的官网文档也没有提到这个问题。

通过查阅stackoverflow,才找到解决的方法。

解决方法

  • 在执行go build的时候添加-ldflags=-compressdwarf=false参数。或,添加以下环境变量export GOFLAGS="-ldflags=-compressdwarf=false"


图片中的12行源代码版权归慕课网所有,仅供效果展示,无意侵犯。

其他问题

如果你发生了上面的问题,很有可能可出现了这个问题

During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.

解决方法降级gdb到8.01,如果你使用brew安装的,可以参考 https://stackoverflow.com/questions/49001329/gdb-doesnt-work-on-macos-high-sierra-10-13-3

  • brew unlink gdb
  • brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
  • (可选) brew pin gdb 防止gdb更新
参考资料:https://stackoverflow.com/questions/52534287/debug-go-program-with-gdb-on-macos https://groups.google.com/forum/#!topic/golang-nuts/LlgN1qpbRE8 https://golang.org/doc/gdb
posted @ 2018-12-10 10:32  zhuxiaoxi  阅读(1859)  评论(0编辑  收藏  举报