• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Golang捕获panic堆栈信息的讲解

    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
    }

    该函数的优点:

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

    总结

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

    您可能感兴趣的文章:
    • golang panic及处理机制
    上一篇:go语言的panic和recover函数用法实例
    下一篇:golang中range在slice和map遍历中的注意事项
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Golang捕获panic堆栈信息的讲解 Golang,捕获,panic,堆栈,信息,