700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > go程序发生异常时如何打印堆栈信息

go程序发生异常时如何打印堆栈信息

时间:2024-03-27 11:27:05

相关推荐

go程序发生异常时如何打印堆栈信息

下面函数仅供参考,当发生异常时可以打印出出错的文件,代码行号,以及堆栈,方便排查错误。

defer func() {

if err := recover(); err != nil {

utils.CheckErr(utils.Panic2Error(err), 2)

}

}()

// CheckErr 错误处理函数,程序中错误分2种,一种需要终止程序,一种仅仅是记录错误日志 flag: 1:exit 2:log only

func CheckErr(err error, flag int) {

var path string

if err != nil {

_, file, line, _ := runtime.Caller(1)

path = " -- " + file + ":" + strconv.Itoa(line)

switch flag {

case CHECK_FLAG_EXIT:

clog.Critical(err.Error() + path)

clog.Critical(StackTrace(false))

panic(err)

case CHECK_FLAG_LOGONLY:

clog.Critical(err.Error() + path)

clog.Critical(StackTrace(false))

default:

clog.Info(err.Error() + path)

}

}

}

func StackTrace(all bool) string {

// Reserve 10K buffer at first

buf := make([]byte, 10240)

for {

size := runtime.Stack(buf, all)

// The size of the buffer may be not enough to hold the stacktrace,

// so double the buffer size

if size == len(buf) {

buf = make([]byte, len(buf)<<1)

continue

}

break

}

return string(buf)

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。