欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang捕獲panic堆棧信息的講解

 更新時(shí)間:2019年04月02日 08:55:15   作者:墨子哲  
今天小編就為大家分享一篇關(guān)于Golang捕獲panic堆棧信息的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

golang當(dāng)中panic的時(shí)候如果啟動(dòng)的goroutine比較多,刷的信息滿屏都是,在終端工具上因?yàn)樗⒌男畔⑻?,找不到前邊的信息,因此很有必要程序自己捕獲panic,并且將錯(cuò)誤信息輸出到文件當(dāng)中,以便定位排查問題。

Golang捕獲panic堆棧信息

func PanicTrace(kb int) []byte {
  s := []byte("/src/runtime/panic.go")
  e := []byte("\ngoroutine ")
  line := []byte("\n")
  stack := make([]byte, kb<<10) //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
}

該函數(shù)的優(yōu)點(diǎn):

  • 比直接recover()捕獲的panic信息更加詳盡
  • 比直接放任其panic打印的堆棧信息更精準(zhǔn),第一行就是發(fā)生panic的代碼行
  • 比直接放任其panic打印的堆棧信息更簡潔,可以指定信息量(kb)

最后注意,如果是啟動(dòng)的多goroutine,需要在每個(gè)goroutine執(zhí)行函數(shù)的時(shí)候,寫上defer PanicHandler() 否則的話是捕獲不到其他goroutine當(dāng)中的painc信息的。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 使用golang腳本基于kubeadm創(chuàng)建新的token(問題分析)

    使用golang腳本基于kubeadm創(chuàng)建新的token(問題分析)

    這篇文章主要介紹了使用golang腳本基于kubeadm創(chuàng)建新的token(問題分析),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-10-10
  • 一文讓你理解go語言的Context

    一文讓你理解go語言的Context

    在Go語言中,Context(上下文)是一個(gè)類型,用于在程序中傳遞請求范圍的值、截止時(shí)間、取消信號(hào)和其他與請求相關(guān)的上下文信息,它在多個(gè)goroutine之間傳遞這些值,使得并發(fā)編程更加可靠和簡單,本文詳細(xì)介紹go語言的Context,需要的朋友可以參考下
    2023-05-05
  • Go語言kube-scheduler深度剖析與開發(fā)之pod調(diào)度

    Go語言kube-scheduler深度剖析與開發(fā)之pod調(diào)度

    這篇文章主要為大家介紹了Go語言kube-scheduler深度剖析與開發(fā),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語言使用AES加密解密的示例代碼

    Go語言使用AES加密解密的示例代碼

    這篇文章主要介紹了Go語言使用AES加密解密的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Golang比較兩個(gè)slice是否相等的問題

    Golang比較兩個(gè)slice是否相等的問題

    本文主要介紹了Golang比較兩個(gè)slice是否相等的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • GO中什么情況會(huì)使用變量逃逸

    GO中什么情況會(huì)使用變量逃逸

    本文主要介紹了GO中什么情況會(huì)使用變量逃逸,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Golang爬蟲框架colly使用淺析

    Golang爬蟲框架colly使用淺析

    這篇文章主要介紹了Golang爬蟲框架colly的使用,colly是Go實(shí)現(xiàn)的比較有名的一款爬蟲框架,而且Go在高并發(fā)和分布式場景的優(yōu)勢也正是爬蟲技術(shù)所需要的,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • Go程序員踩過的defer坑錯(cuò)誤處理

    Go程序員踩過的defer坑錯(cuò)誤處理

    這篇文章主要為大家介紹了Go程序員踩過的defer坑錯(cuò)誤處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語言Mock使用基本指南詳解

    Go語言Mock使用基本指南詳解

    這篇文章主要介紹了Go語言Mock使用基本指南詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Golang?Template實(shí)現(xiàn)自定義函數(shù)的操作指南

    Golang?Template實(shí)現(xiàn)自定義函數(shù)的操作指南

    這篇文章主要為大家詳細(xì)介紹了Golang如何利用Template實(shí)現(xiàn)自定義函數(shù)的操作,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02

最新評(píng)論