How to get the stack trace pointing to actual error reason

前端 未结 8 1725
夕颜
夕颜 2020-12-18 19:42

Let\'s say I have some code like this:

value, err := some3rdpartylib.DoSomething()
if err != nil {
    panic(err)
}

In case err != ni

8条回答
  •  盖世英雄少女心
    2020-12-18 20:04

    Take a look at: https://github.com/efimovalex/stackerr

    Is this the thing you are looking for?

    package main
    
    import "github.com/efimovalex/stackerr"
    import "fmt"
    
    func f1() *stackerr.Err {
        err := stackerr.Error("message")
        return err.Stack()
    }
    
    func f2() *stackerr.Err {
        err := f1()
        return err.Stack()
    }
    
    type t1 struct{}
    
    func (t *t1) f3() *stackerr.Err {
        err := f2()
        return err.Stack()
    }
    
    func main() {
        ts := t1{}
        err := ts.f3()
    
        err.Log()
    }
    

    Result:

    2017/08/31 12:13:47 Error Stacktrace:
    -> github.com/efimovalex/stackerr/example/main.go:25 (main.main)
    -> github.com/efimovalex/stackerr/example/main.go:19 (main.(*t1).f3)
    -> github.com/efimovalex/stackerr/example/main.go:12 (main.f2)
    -> github.com/efimovalex/stackerr/example/main.go:7 (main.f1)
    

提交回复
热议问题