go 程序生成 coredump 文件

go 程序也可以开启类似 C++ coredump 功能,这样有时可以方便我们定位问题。
示例代码:

package main

func main() {
    var a map[int]string
    a[1] = "hello world"
}

注意:我们使用dlv 结合core文件查看时,需要编译出来的可执行文件带有符号信息。

一次性开启coredump 功能

有时候,我们只需要一次性使用coredump功能,那么直接按照如下方法即可:

GOTRACEBACK=crash ./main

如果需要永久的开启coredump,那么需要按照如下方法:

开启core文件功能
  • 设置core文件限制大小
    使用 ulimit -c 可以查看core文件限制大小,一般来说,默认为0,这种是不能生成core文件的。
    使用下面的命令改为无限制。
    # ulimit -c unlimited  # 针对当前终端此次会话有效
    
  • 设置 GOTRACEBACK 环境变量值为 crash
    # export GOTRACEBACK=crash    # 针对当前终端此次会话有效
    # env | grep GOTRACEBACK      # 查看
      GOTRACEBACK=crash
    

如果需要针对当前用户一直生效,那么需要在 ~/.bash_profile 追加上述内容。
如果需要针对所有用户生效,那么需要在 /etc/profile 追加上述内容。

然后再对应执行source ~/.bash_profile 或者 source /etc/profile

systemd 服务配置文件中

很多时候,我们的服务是以systemd 来管理的,那么我们可以在中的配置文件中的Service节中加入:

[Service]
LimitCORE=infinity
Environment="GOTRACEBACK=crash"
...
控制core文件格式

/proc/sys/kernel/core_pattern 可以设置格式化的core文件保存位置和文件名。

比如:core-%e-%p-%t 表示在当前目录生成 "core-命令-pid-时间戳" 为文件名的core文件
比如:/cfg/core-%e-%p-%t 表示在/cfg下生成 "core-命令-pid-时间戳" 为文件名的core文件

注意:/proc/sys/kernel/core_pattern 不能直接编辑,可以用 echo core-%e-%p-%t > /proc/sys/kernel/core_pattern

符号 意义
%p insert pid into filename 添加 pid
%u insert current uid into filename 添加当前 uid
%g insert current gid into filename 添加当前 gid
%s insert signal that caused the coredump into the filename 添加导致产生 core 的信号
%t insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间戳
%h insert hostname where the coredump happened into filename 添加主机名
%e insert coredumping executable name into filename 添加命令名
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使...
    随风化作雨阅读 47,812评论 2 15
  • 官方文档 http://sourceware.org/gdb/current/onlinedocs/gdb/[ht...
    wayyyy阅读 13,979评论 0 3
  • 一、core 文件的生成 C程序因为segment fault(段错误)崩溃时,如果系统core dump功能是打...
    zhuweipu阅读 2,510评论 0 2
  • 本文讲述利用coredump调试时,对coredump信息相关的设置方式。 设置core文件大小 列出所有资源的限...
    QuietHeart阅读 9,092评论 0 1
  • 目录 常用基础命令 Bash 快捷键 根目录结构 进程管理 UID 和 GID 权限设置 字节序 输入输出 文件描...
    marysp阅读 371评论 0 0

友情链接更多精彩内容