gitee.com/KyleChenSource/lib-robot@v1.0.2/robottest/common/recover.go (about) 1 package common 2 3 import ( 4 "fmt" 5 "runtime" 6 7 "gitee.com/KyleChenSource/lib-robot/robottest/log" 8 ) 9 10 type PanicHandler func() 11 12 func PanicLog(h PanicHandler) { 13 if v := recover(); v != nil { 14 bt := Backtrace(2) 15 errMsg := fmt.Sprintf("panic_recover:\n%s\n%s", bt, v) 16 log.LogError(errMsg) 17 18 if h != nil { 19 h() 20 } 21 } 22 } 23 24 func Backtrace(skip int) string { 25 ret := "Traceback (most recent call last):\n" 26 for i := 0; ; i++ { 27 pc, file, line, ok := runtime.Caller(i + skip) 28 if !ok { 29 break 30 } 31 ret = fmt.Sprintf("%s % 3d. %s() %s:%d\n", ret, i, runtime.FuncForPC(pc).Name(), file, line) 32 } 33 return ret 34 }