在MacOS上使用gdb(cgdb)除錯Golang程式

zhuxiaoxi發表於2018-12-10

如果你在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"

在MacOS上使用gdb(cgdb)除錯Golang程式
圖片中的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

相關文章