Go goroutine栈跟踪中的各类数字分别代表什么含义?
Go goroutine栈跟踪数值含义说明
你给出的栈跟踪里的两类数值含义分别如下:
函数参数列表中的十六进制值(0x467a05, 0xc000000180, 0x200000003)
- 这些是对应函数调用时的入参值,Go runtime打印栈跟踪时,会把函数的所有入参按栈上存储的顺序,以字长为单位拆分为十六进制值输出:
- 这里三个值对应
runtime/debug.Stack函数的三个入参的原始值,指针类型参数会直接打印内存地址,整型参数会打印对应的十六进制表示 - 如果参数是接口、结构体等复合类型,会被拆分为多个十六进制值展示,比如interface类型会拆分为类型指针、数据指针两个连续的十六进制值
- 这里三个值对应
行号后的偏移值(+0x80 +0x18 +0x101)
- 该值表示当前执行的指令地址,相对于对应函数入口地址的字节偏移量:
- 以
/usr/lib/golang/src/runtime/debug/stack.go:24 +0x80为例,含义是当前正在执行runtime/debug.Stack函数中,对应源代码stack.go第24行的指令,该指令的内存地址比runtime/debug.Stack函数的入口地址高0x80(十进制128)字节 - 这个偏移量主要用于精准定位执行位置,当编译开启优化导致源代码行号和汇编指令对应关系不准确,或者单行代码对应多条汇编指令时,可以结合函数的汇编输出,直接定位到当前执行的具体指令
- 以
内容的提问来源于stack exchange,提问作者wate
相关产品推荐
相关产品推荐

