Golang堆栈跟踪详解

7
我希望有人能解释一下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.
附注:恐慌是由指向func GetJson(* http.Response,interface {})error的空指针引起的。

3
这是堆栈帧 PC 和函数入口 PC 之间的区别。(实现特定的堆栈跟踪格式可能不是 StackOverflow 的好问题主题) - JimB
1
@JimB,谢谢,我有一些维基文章要读。但是我想知道为什么这不是一个适合在SO上提问的好话题?会引发争论吗?还有其他的XYZ交流平台可以讨论这个问题吗? - Radosław Cymer
1
这个话题更多地属于灰色地带,主要是因为实现细节可能不适用于所有流行的实现,可能会发生变化,有时会相当快地改变,导致问题或答案过时和/或误导。并不是说堆栈跟踪格式在此时点上很可能会改变,但例如其他 GODEBUG 输出在版本之间发生了显着变化,因为它需要反映实现。 - JimB
1个回答

3

这是堆栈帧PC和函数入口PC之间的区别。
感谢JimB


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接