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  }