Go Stack Trace

package main

import "fmt"

type trace struct{}

func main() {
        slice := make([]string, 2, 4)
        
        var t trace
        t.Example(slice, "hello", 10)

}


func (t *trace) Example(slice []string, str string, i int) {
        fmt.Printf("Receiver Address: %p\n", t)
        panic("Want stack trace")
}

Example函數的聲明中,它有三個參數,一個字符串slice,一個字符串和一個整數。它的方法體也很簡單,只有一行,拋出一個panic,這會產生一個堆棧跟蹤信息,也就是當前Panic的堆棧信息:

堆棧信息方法中的0x1157c08是Receiver Address的值。

對於[]string類型的參數。slice是引用類型,這意味着那個值是一個指針的頭信息(header value),它指向一個字符串。對於slice,它的頭是三個word數,指向一個數組。因此0xc420043f38,0x2,0x4代表這個slice。


第5個和第6個參數代表字符串的參數。0x10c0224是指向這個字符串底層數組的指針,0x5是"hello"字符串的長度.


參數0xa是10,代表example中的第三個參數。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章