Go Stack Trace 信息
时间:2021-05-31 14:28:28
参考:
Go Stack Trace 信息#
go 编译的时候会优化掉没有使用的参数,可以使用 -gcflags "-N -l"
禁止编译优化。例如:
堆栈追踪信息含义#
-
slice
:引用类型。个数为三,第一个是指向底层数组的指针,第二个表示长度,第三个表示容量。 -
map
类型。个数为一,显示map的地址。//data := make(map[string]string, 0) //testParam(data) func testParam(data map[string]string) { panic("") } # 输出 goroutine 1 [running]: main.testParam(0x14000066e68) /Users/feilong/workspace/github/FPF_Go/main.go:16 +0x98 main.main() /Users/feilong/workspace/github/FPF_Go/main.go:11 +0x7c exit status 2
-
string:应用类型,个数为二,第一个表示地址指针执行底层字节数组,第二个表示字符串长度。
-
指针类型:个数为1,表示指针地址。
-
int 类型:个数为1,表示int的值。
-
boolean、uint8类型,会合并参数,一个字可以表示四个boolean。在64位机器上,一个字可以表示8个布尔类型。
# 代码 01 package main 02 03 func main() { 04 Example(true, false, true, 25) 05 } 06 07 func Example(b1, b2, b3 bool, i uint8) { 08 panic("Want stack trace") 09 } # 异常信息 01 goroutine 1 [running]: 02 main.Example(0x19010001) /Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/ temp/main.go:8 +0x64 03 main.main() /Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/ temp/main.go:4 +0x32 # 参数解析 // Parameter values true, false, true, 25 // Word value Bits Binary Hex Value 00-07 0000 0001 01 true 08-15 0000 0000 00 false 16-23 0000 0001 01 true 24-31 0001 1001 19 25 // Declaration main.Example(b1, b2, b3 bool, i uint8) // Stack trace main.Example(0x19010001)
-
接口类型参数,个数为2,第一个表示类型,第二个表示指针地址。
-
指针作为方法的接收器,个数为一,会第一个打印接收器的地址。
-
chan 类型参数,个数为1,打印指针地址。
-
func 类型作为参数,个数为1,指针地址。
-
结构体作为方法的接收器,会第打印结构体的属性信息。
type Data struct { value string value1 string } func (d Data) testParam() { panic("") } func main() { data := Data{value: "1", value1: "11"} data.testParam() } //输出 main.Data.testParam({{0x104ef4c88, 0x1}, {0x104ef4ca6, 0x2}}) /Users/feilong/workspace/github/FPF_Go/main.go:9 +0x3c main.main() /Users/feilong/workspace/github/FPF_Go/main.go:14 +0x4c ## demo2---------------------- type Data int func (d Data) testParam() { panic("") } func main() { data := Data(11) data.testParam() } //输出 main.Data.testParam(0xb) /Users/feilong/workspace/github/FPF_Go/main.go:6 +0x30 main.main() /Users/feilong/workspace/github/FPF_Go/main.go:11 +0x24
-
方法没有接收器,不会打印多余信息。