CoreDump是异常退出程序的内存快照。可以用在进程死后debug来找出crash发生的原因以及牵连的变量。

通过GOTRACEBACK,Go提供了控制程序崩溃时的输出。变量还可以强制生成CoreDump,使得debug成为可能。

Delve是Go编程语言的调试器。该项目的目标是为Go提供一个简单的、全功能的调试工具。

(注:本次测试环境为 Linux)

1. 编译配置

编译时增加 -gcflags="-N -l", 关闭gc优化和内联

命令行编译 go build -gcflags="-N -l" main.go (main.go为要编译的go文件)

若使用Goland开发和编译,修改编译配置,在 Go工具实参这栏添加参数,如图

2. Linux 统环境配置

检查ulimit配置,使用 ulimit -a 查看core文件设置

如果值为0 ,使用 ulimit -c 1024 设置个大一点的值(该设置是临时生效)

如果想永久设置生效,修改/etc/security/limits.conf,增加一行(注意使用Tab或复制注释行修改)

*               soft    core            1024

3. 在程序运行时增加GOTRACEBACK参数

两种方式(execute为可执行程序)

(1) 命令行直接附加运行参数

GOTRACEBACK=crash ./execute

(2)设置环境变量

export GOTRACEBACK=crash

(也可以修改环境变量永久生效,此处不浪费篇幅)

此时再运行execute/可执行程序,崩溃即可得到core文件

4. 使用Delve定位问题

Dlv项目GitHub地址 GitHub - derekparker/delve: Delve is a debugger for the Go programming language.

(1)安装

git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve

cd $GOPATH/src/github.com/go-delve/delve

make install

本次测试环境是Linux,其他环境请参考官方文档 delve/Documentation/installation at master · derekparker/delve · GitHub)

(2)使用Dlv定位问题

首先输入 dlv core execute coredump ,检查核心转储/core文件

输入 bt 打印出错时的堆栈信息

可以看到左边编号9的地方是panic报错,编号10是main调用crash报错

可以先看一下panic错误信息

输入 frame 9,报错信息为 整数除以0

我们再输入 frame 10 ,看看具体的错误信息

输入 locals -v ,查看出错时的变量值,sum=215586,对42取余数为0,除数不能为0

Go使用Delve 分析CoreDump文件定位错误相关推荐

  1. 使用gdb分析coredump文件排查流媒体服务srs偶发内存泄漏问题

    内存泄漏 正常情况内存消耗比较平稳,但是异常后如下图可以看到内存在几个小时内内存消耗殆尽导致操作系统直接kill掉srs进程 排查难点 内存泄漏是偶发的这是排查的难点,如果是必现可以借助一些成熟的工具 ...

  2. Linux内核: 分析coredump文件

    Linux内核:分析coredump文件 - 内核代码崩溃 分类:             Linux内核编程             2013-10-23 17:21     619人阅读     ...

  3. php代码执行dump文件,使用MAT分析dump文件定位程序问题

    一.dump生成 dump可以是内存溢出时让其自动生成,或者手工直接导.配置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/bi ...

  4. visual studio 怎么生成coredump文件_coredump详解

    一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要 ...

  5. coredump文件的生成以及如何调试coredump文件?

    生成coredump文件的相关配置 1. 首先通过 ulimit -a 命令,查看是否允许coredump文件生成; 如下图所示,core文件大小限制为0,即:不允许core文件生成 2. 使用 ul ...

  6. MiniDump文件的创建、分析堆栈信息、定位错误、查看异常处理信息

    1.MiniDump文件的创建: 创建miniDump的方法有很多.可以通过MiniDumpCreateDumpWin32Api创建.必要参数为EXCEPTION_POINTERS结构,获取这个结构可 ...

  7. mybatis异常:Could not find result map Java.util.Map 问题分析及解决 定位不到具体的位置的错误

    mybatis异常:Could not find result map Java.util.Map 问题分析及解决 定位不到具体的位置的错误 参考文章: (1)mybatis异常:Could not ...

  8. 通过dlv简单分析Go coredump文件

    文章目录 dlv调试工具安装 调试Go程序core dump文件 Linux环境配置 Go环境配置 测试用例 总结 dlv调试工具安装 Github地址:https://github.com/go-d ...

  9. coredump文件是如何生成的

    目录 一.coredump 文件生成过程 二.coredump文件生成原理 1. 信号处理 do_signal() 2. 生成 coredump 文件 三.生产环境应该打开 coredump 功能吗? ...

最新文章

  1. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++
  2. 东北师范大学计算机科学与技术学科评估,东北的大学最强十校,工科是真强,2所211大学无缘前十...
  3. Bone Collector II
  4. 单例模式的5种实现方法及优缺点
  5. 您好,这是我的第一篇文章
  6. 一步步编写操作系统 39 二级页表1
  7. Crontab 自动删除指定日期前文件或者文件夹
  8. android 高德地图设置不能旋转_如何将平面控制点导入Google Earth、奥维互动地图及手机奥维互动地图APP里面?...
  9. 使用Go实现Socket服务端和客户端通信
  10. linux 软件安装命令介绍
  11. 网易你收集用户身份证扫描件意欲何为——隄防维权背后的个人信息安全陷阱
  12. 出售永磁同步电机(pmsm)模型预测控制(MPC)matlab/simulink仿真模型,转速控制,电流控制,转矩控制,直接预测控制(有限集模型预测控制)(这单矢量和双矢量,三矢量),无差拍,foc矢
  13. MATLAB雾霾天气下运动目标检测
  14. 云课堂C++类10T级课程第十课
  15. 如何为PPT加上页码/总页码
  16. 选队长游戏(Java)
  17. uniapp 刷新页面
  18. 用MATLAB打开含有英文、数字和汉字的txt文件
  19. 益阳定制网站多少钱,益阳品牌网站建设多少钱
  20. 概率论第二章知识点+错题总结

热门文章

  1. C语言限制双开关不同为1,网络环境下不同客户之间通信的C语言编程方法(第1稿)...
  2. HAL读写FLASH笔记
  3. jmeter之beanshell sample使用
  4. 微服务(四)—— 用户模块(backend-user)
  5. WiFi Direct 在wpa_supplicant中的流程一(初始化P2P)
  6. 股票记录-2017-8-17晚上总结
  7. 2022华为杯A题第一问详细思路
  8. VUE环境搭建教程以及VSCODE插件Vetur和ESlint的安装配置
  9. python微信api_Python调用微信公众平台接口操作示例
  10. js中,在数组后添加数组