golang panic堆栈分析

作者: ropon 分类: Go 发布时间: 2022-05-26 14:37
package main

import (
    "fmt"
    "runtime/debug"
)

type trace struct{}

type user struct {
    name string
}

func main() {
    slice := make([]string, 2, 4)
    //TestStack(slice, "hello", 10)
    var t trace
    t.TestStack(slice, "hello", 10)
    //Example(true, false, true, 25)
}

func TestStack(slice []string, str string, i int) {
    panic("Want stack trace")
}

func (t *trace) TestStack(slice []string, str string, i int) (u *user,  err error)  {
    fmt.Printf("Receiver Address: %p\n", t)
    panic("Want stack trace")
}

func Example(b1, b2, b3 bool, i uint8) {
    defer func() {
        err := recover()
        if err != nil {
            stackStr := string(debug.Stack())
            fmt.Println(stackStr)
        }
    }()
    panic("Want stack trace")
}

/*
goroutine 1 [running]:
main.(*trace).TestStack(0x60, {0x11a95b8, 0x60, 0x113d6c0}, {0xc00008c000, 0x0}, 0xc0000001a0)
0x60 *t的地址
{0x11a95b8, 0x60, 0x113d6c0} slice []string 3字节 底层数组指针/长度/容量
{0xc00008c000, 0x0} str string 底层字节数组指针/长度
0xc0000001a0 i int

main.Example(0xa0, 0x1, 0x0, 0x0)
*/

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!