gdb調試golang

       對於golang這類靜態型語言調試工具是必不可少的,無論是在平時的開發仍是對語言底層原理的熟悉上面都是很重要的工具。gdb做爲unix及unix-like系統上面強大的調試工具一樣能夠調試golang應用。golang

     經過下面的講解你能夠一步一步的看到golang代碼是如何執行的,變量如何賦值的,內存是何時分配的等等一系列底層原理。bash

準備環境:
       gdb 7.1和以上

       go開發環境函數

一段簡短的golang代碼工具

package main
import "fmt"
func main(){
  c:=make(map[string]interface{})
  fmt.Println(c)
}複製代碼

go build -gcflags "-N -l" test.go //生成可執行代碼,編譯,關閉內聯優化優化

好了,至此準備工做已經ok,環境,工具,運行程序都有了,下面開始利用gdb調試go可執行文件。ui

gdb -tui test   #在運行時同時顯示代碼 特別方便spa

  >> b main.main //在main函數加斷點.net

   >>run           //運行進程unix

  >>s             //s是step的縮寫,s和n的區別 看下面指針

、、、、、、、、、、

s: 執行一行源程序代碼,若是此行代碼中有函數調用,則進入該函數;

n: 執行一行源程序代碼,此行代碼中的函數調用也一併執行。

s 至關於其它調試器中的「Step Into (單步跟蹤進入)」;
n 至關於其它調試器中的「Step Over (單步跟蹤)」。

、、、、、、、、、、、


繼續輸入s


經過上面的能夠清晰的看出來,隨着輸入s能夠看出代碼詳細的執行過程,好比map的執行過程,內存分配過程等等,若是隻是想看寫的代碼一行一行的執行結果能夠輸入n。

      經過上面的命令已經能夠很好的查看golang代碼運行過程,下面是一些具體的變量信息,方便更加具體瞭解值。

下面是一些經常使用的命令,能夠看看,
l main.go:8 // 以 :方式查看源碼。
b main.main // 以 .方式設置斷點。
b main.go:17 // 以 :方式設置斷點。


info breakpoints // 查看全部斷點。
info goroutines // 查看 goroutines 信息。

goroutine 1 bt // 查看指定序號的 goroutine 調用堆棧。
goroutine 2 bt // 這個 goroutine 貌似跟 GC 有關。
c 繼續執行
n 執行下一個指令
info goroutines // 當前 goroutine 序號爲 1。
goroutine 1 bt // 當前 goroutine 調用堆棧。
bt    // 查看當前調⽤堆棧,能夠與當前 goroutine 調用堆棧對比。
info frame // 堆棧幀信息。
info locals // 查看局部變量
p s // 以 Pretty-Print 方式查看變量。

whatis i // 查看對象類型

c // 繼續執行,觸發 breakpoint() 斷點。

info args // 從參數信息中,咱們能夠看到命名返回參數的值。

x/3xw &r // 查看 r 內存數據。(指針 8 + 長度 4)

q // 退出 GDB。


強烈推薦blog:

https://blog.csdn.net/liigo/article/details/582231?utm_source=copy 這篇文章能夠好

相關文章
相關標籤/搜索