February 10th, 2020
前提
日前 2020/02/01 ~ 02/02 (FOSDEM: Free and Open source Software Developers’ European Meeting ) 也就是歐洲最大的開源開發者大會(可以解釋成歐洲版本的 COSCUP 嗎?) 裡面有一個專門的 Go DevRoom ,所有的投影片跟影片都有公開出來。 歡迎大家來裡面挖寶!!
投影片與影片鏈結: https://fosdem.org/2020/schedule/track/go/
Advanced debugging techniques of Go code / Andrii Soldatenko
投影片與影片: link
除了 “The state of Go” 這種 keynote 類型的主題之外,第一個讓我想要了解的就是這篇。在 Golang 上面的進階除錯技巧部分。 裡面提到的 debugging skill 主要是透過 https://github.com/go-delve/delve 所提供的相關技巧。相關的技巧包括了:
- 如何 attach by delve
- 如何設定 conditional breakpoint
- 如何透過 delve 來跑 unit test ,就是透過 delve 來跑 test function
- 我個人很愛用這個,也很常使用。
- 甚至可以使用 Goland 裡面的 eval 來快速查詢相關數值
最後介紹的技巧就是透過 delve 來 remote debugging docker container ,透過了 docker port expose 將 web app 的 port 轉給 delve (e.g. port 40000) 使用。然後就可以透過 port 40000 來 attach delve debugger 。
最後當然你也會好奇,這些不是 GDB 就可以了嗎?但是其實 GDB 有一些小問題:
- GDB MacOSX 需要 codesign
- 如果再 MacOSX 10.13 使用 GDB 舊的版本 8.0.1 才能正常 attach Go app
- 由於 Golang 在 MacOSX 上面有使用
compress dwarf
這樣會使得 debugging info 無法正確在 GDB 上面顯示出來。 需要再 compiler 的時候加上以下參數。go build -ldflags=-compressdwarf=false -gcflags=all
才能讓 GDB 看到 symbol
這一場 talk 真的滿實用的,很推薦大家聽聽。