2017-03-17 178 views
1

我希望有人能向我解釋Golang的堆棧跟蹤的一個小細節,這大部分都被我讀過的教程忽略了。堆棧跟蹤的 例子我:Golang堆棧跟蹤詳細信息

 

    goroutine 6 [running]: 
    net/http.(*conn).serve.func1(0xc42005ad00) 
     /usr/local/go/src/net/http/server.go:1491 +0x12a 
    panic(0x8079e0, 0xc42000c0c0) 
     /usr/local/go/src/runtime/panic.go:458 +0x243 
    usos-shop-back/usosapi.GetJson(0x0, 0x7d7820, 0xc4202f6d00, 0x0, 0x0) 
     /root/go/src/usos-shop-back/usosapi/usos-hackery.go:20 +0x38 
    ... 
    ... 
    ... 

所以我真的很好奇什麼是+0x12a+0x243+0x38的代碼行,其中發生錯誤的次數後的含義。

謝謝, R.C.

P.S:恐慌是由空指針引起func GetJson(*http.Response, interface{}) error

+2

這是堆棧幀PC和功能登錄PC之間的區別。 (實現特定的堆棧跟蹤格式可能不是StackOverflow的一個好問題) – JimB

+0

@JimB,謝謝,我已經閱讀了一些wiki文章。不過,我想知道爲什麼SO不是一個好問題?它會導致火焰戰爭嗎?還有其他一些XYZexchange嗎? –

+1

本主題更多的是灰色地帶,主要是因爲實現細節可能不適用於所有常用實現,可能會更改,有時會相當快地更改,導致問題或答案過時和/或誤導。並不是說go1的堆棧跟蹤格式可能會改變,但是例如其他GODEBUG輸出在版本之間發生了顯着變化,因爲它需要反映實現。 – JimB

回答

0

它的堆棧幀PC和函數入口PC之間的區別。
感謝 JimB