go 程序生成 coredump 文件

2022-04-17  本文已影响0人  wayyyy
开启core文件功能

如果需要针对当前用户一直生效,那么需要在 ~/.bash_profile 追加:

ulimit -c unlimited
GOTRACEBACK=crash

如果需要针对所有用户生效,那么需要在 /etc/profile 追加:

ulimit -c unlimited
GOTRACEBACK=crash

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

测试:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "hello world\n")
    })
    log.Fatal(http.ListenAndServe("localhost:7777", nil))
}

编译运行,然后键盘敲 Ctrl + \,会发现当前目录生成了core文件。

控制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 添加命令名
上一篇下一篇

猜你喜欢

热点阅读