主页 > 知识库 > Golang捕获panic堆栈信息的讲解

Golang捕获panic堆栈信息的讲解

热门标签:南通如皋申请开通400电话 广州呼叫中心外呼系统 高德地图标注口诀 学海导航地图标注 地图标注的汽车标 浙江高速公路地图标注 江西转化率高的羿智云外呼系统 西部云谷一期地图标注 中国地图标注省会高清

golang当中panic的时候如果启动的goroutine比较多,刷的信息满屏都是,在终端工具上因为刷的信息太多,找不到前边的信息,因此很有必要程序自己捕获panic,并且将错误信息输出到文件当中,以便定位排查问题。

Golang捕获panic堆栈信息

func PanicTrace(kb int) []byte {
  s := []byte("/src/runtime/panic.go")
  e := []byte("\ngoroutine ")
  line := []byte("\n")
  stack := make([]byte, kb10) //4KB
  length := runtime.Stack(stack, true)
  start := bytes.Index(stack, s)
  stack = stack[start:length]
  start = bytes.Index(stack, line) + 1
  stack = stack[start:]
  end := bytes.LastIndex(stack, line)
  if end != -1 {
    stack = stack[:end]
  }
  end = bytes.Index(stack, e)
  if end != -1 {
    stack = stack[:end]
  }
  stack = bytes.TrimRight(stack, "\n")
  return stack
}

该函数的优点:

  • 比直接recover()捕获的panic信息更加详尽
  • 比直接放任其panic打印的堆栈信息更精准,第一行就是发生panic的代码行
  • 比直接放任其panic打印的堆栈信息更简洁,可以指定信息量(kb)

最后注意,如果是启动的多goroutine,需要在每个goroutine执行函数的时候,写上defer PanicHandler() 否则的话是捕获不到其他goroutine当中的painc信息的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:
  • golang panic及处理机制

标签:曲靖 贵州 吐鲁番 保定 东营 许昌 常州 德宏

巨人网络通讯声明:本文标题《Golang捕获panic堆栈信息的讲解》,本文关键词  Golang,捕获,panic,堆栈,信息,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Golang捕获panic堆栈信息的讲解》相关的同类信息!
  • 本页收集关于Golang捕获panic堆栈信息的讲解的相关信息资讯供网民参考!
  • 推荐文章