恐慌堆栈跟踪:值如何映射到函数的参数?

时间:2018-01-09 15:03:56

标签: go

查看最后一行“.Number(...”

是否可以从这些十六进制数中辨别方法Number()的参数?

如果不经常调试调试器,这将是一种帮助。

panic: runtime error: index out of range

goroutine 19 [running]:
testing.tRunner.func1(0xc042046340)
    C:/Go/src/testing/testing.go:622 +0x2a4
panic(0x523e20, 0x5df810)
    C:/Go/src/runtime/panic.go:489 +0x2dd
util.(*NumberEngine).Number(0xc042066150, 0xf4698, 0xa, 0xc042b2a870, 0xa)

编辑:包括方法的完整签名

func (fe *NumberEngine) Number(num int) Number {

编辑:包括数字

的定义
type Power struct{ Prime, Exp int }
type Number []Power

1 个答案:

答案 0 :(得分:3)

在“参考”实施中(被称为gc,可在https://golang.org下载):

  • 方法的第一个参数是方法的接收者。

    在你的情况下它是一个指针接收器,所以0xc042066150是 内存中NumberEngine个实例的地址。

  • 所有参数都在堆栈中传递 - 从左到右。

    • struct等复合类型的字段按其在类型中定义的顺序显示。
    • string和切片是复合类型 - 每个包含两个和三个字段, 分别为:指针+长度和指针+长度+容量。

有关详细信息,我们需要util.(*NumberEngine).Number方法的签名,以及它使用的任何自定义类型的定义(如果有)。