首页 > 其他分享 >go panic

go panic

时间:2023-07-15 10:35:08浏览次数:27  
标签:core map fmt dlv func go panic

panic可能原因

1. 空指针
2. 直接调用panic函数
3. 数组越界
4. map读写并发(recover不能恢复)

core dump
程序出现段错误时出现的错误文件,通过该文件确认错误的位置。
程序因段错误异常终止时打印堆栈信息
// 开启core dump功能,不限制core文件大小
ulimit -c unlimited
// 临时修改core文件保存位置
echo /var/log/%e.core.%p > /proc/sys/kernel/core_pattern
// 触发core dump
export GOTRACEBACK=crash

并发读写map示例代码

package main

import (
   "fmt"
   "time"
)

func main(){
   c := make(map[string]int)
   // 写map
   go func() {
      for j := 0; j < 1000000; j++ {
         c[fmt.Sprintf("%d", j)] = j
      }
   }()
   // 读map
   go func() {
      for j := 0; j < 1000000; j++ {
         fmt.Println(c[fmt.Sprintf("%d",j)])
      }
   }()
   time.Sleep(time.Second*20)
}

自动生成coredump文件

使用golang的dlv来调试core文件
git clone https://github.com/go-delve/delve
cd delve/cmd/dlv/
交叉编译dlv
GOOS=linux GOARCH=amd64 go build
拷贝到目标机器上后,--check-go-version=false 忽略go版本和dlv版本的区别
./dlv core {这里是你的程序} {这里是coredump文件} --check-go-version=false
bt
分析堆栈的错误

引入pprof
关闭防火墙服务,确保外部可以正常访问机器pprof

systemctl stop firewalld.service

import  _ "net/http/pprof"

go func() {
    http.ListenAndServe(":7000", nil)
}()

浏览器直接打开
http://localhost:7000/debug/pprof/

标签:core,map,fmt,dlv,func,go,panic
From: https://www.cnblogs.com/WJQ2017/p/17555720.html

相关文章

  • go 时间错误
    invalidoperation:n*time.Second(mismatchedtypesintandtime.Duration)packagemainimport"time"funcmain(){n:=1time.Sleep(n*time.Second)}time.Sleep支持参数是常量,变量需要强制类型转换成time.Duration。time.Sleep(time.Duration(n)*time.S......
  • go map
    map内存模型//AheaderforaGomap.typehmapstruct{//元素个数,调用len(map)时,直接返回此值countintflagsuint8//buckets的对数log_2Buint8//overflow的bucket近似数noverflowuint16//计算key的......
  • patrickmn.gocache
    一句话概括基于内存的KV缓存,支持删除和过期以及持久化到文件并恢复。使用示例go.mod增加依赖requiregithub.com/patrickmn/go-cachev2.1.0+incompatiblepackagemainimport("log""time""github.com/patrickmn/go-cache")varc*cache.Cachefuncinit()......
  • 学的java,工作用的go?
    学的java,找的java开发,进了公司却在使用go。第一天让拉代码,我以为我拉的是java代码,没想到却是go。当时慌死了,我只听说过go,连helloworld都没有go写过。既来之,则安之,我接下来就是装goland,配环境变量,好在代码跑起来了,这个项目使用go+Gin来进行开发,甚至连数据库都不是我熟悉......
  • go context
    使用场景在协程之间传递上下文context接口typeContextinterface{//返回绑定当前context的任务取消的截止时间//如果没有设定期限,将返回ok==falseDeadline()(deadlinetime.Time,okbool)//绑定当前context的任务取消时返回一个关闭的channel......
  • R语言中 topGO包的安装
     001、if(!requireNamespace("BiocManager",quietly=TRUE))install.packages("BiocManager")BiocManager::install("topGO",force=TRUE)library(topGO)  。......
  • VSCode - Install/Update gotools
    View-->CommandPaletteInput'gotools'ClickOK.......
  • 说说 Go 语言的坑(二)
    上一篇文章说说Go语言for-range的坑说的是for-range的,工作中,其实还是遇到蛮多奇奇怪怪的问题,这里也顺便整理了一下,就当作是续集:)先继续看for-range的另一个坑:下面代码输出什么?funcmain(){ vara=[]int{1,2,3,4,5} varr=make([]int,0) fori,v:=ran......
  • go text模板
    packageinstallimport("bytes""fmt""strings""text/template""github.com/fanux/sealos/pkg/logger""sigs.k8s.io/yaml")varConfigTypestringfuncsetKubeadmAPI(versionstring){maj......
  • 用googletest写cpp单测
    框架概述GoogleTest(也称为googletest)是由Google开发的C++单元测试框架。它的首个版本是在2004年发布的,作为Google内部的测试框架使用。随后,GoogleTest在开源社区中得到广泛应用,并在许多项目和组织中成为首选的C++单元测试框架。GoogleTest提供了丰富的断言函数和......