在MacOS上使用gdb(cgdb)調試Golang程序

若是你在MacOS上使用GDB工具載入Golang程序時沒法載入,這篇文章能夠解決。本文不具體介紹調試的方法,網上的文章太多了就不贅述了。
cgdb使用的是gdb的內核,方法和原理試用本文。git

問題分析

最近接觸Go語言,看了慕課網的這篇文章,裏面介紹的Go函數,有一種JavaScript的風格,把我弄迷糊了。記得剛接觸JavaScript的時候,什麼匿名函數自執行,弄的是暈頭轉性。決定使用調試器對這篇文章中的示例代碼進行調試。github

找了不少文章介紹GDB調試Golang程序的文章都不能載入。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語言的官網文檔也沒有提到這個問題。macos

經過查閱stackoverflow,才找到解決的方法。函數

解決方法

  • 在執行go build的時候添加-ldflags=-compressdwarf=false參數。或,添加如下環境變量export GOFLAGS="-ldflags=-compressdwarf=false"


圖片中的12行源代碼版權歸慕課網全部,僅供效果展現,無心侵犯。工具

其餘問題

若是你發生了上面的問題,頗有可能可出現了這個問題ui

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-3google

  • 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
相關文章
相關標籤/搜索