百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

core文件去哪里了

liebian365 2024-11-20 18:23 18 浏览 0 评论

对于c程序员来说,core文件是分析内存错误的有用的文件,结合gdb命令,一般情况下(有时候代码编译的时候没有包含debug信息或者栈空间被破坏,会看不到具体的位置信息),可以知道导致core的具体的代码位置。

通常做法是:

gdb 应用程序名 core.xxx
> where

但是最近在centos8上排查core问题的时候,发现core文件没有了,通过:

ulimit -c 

排查结果是unlimited ,那么core文件哪里去了那。

一 是不是真的core了

首先思路是排查下,程序是被别人kill了,还是真的core dump了,通过命令:

dmesg
或者 tail -f  /var/log/message

如果真的程序core dump,可以看到如下的信息:

dmesg默认情况下不会打印这么容易识别的时间,可以通过-H选项来打印 具体的时间,如上图。

好了排查完毕,程序确实core了,但是core没找到那。

二 排查是不是core文件大小限制

虽然刚才用ulimit -c命令进行查看,需要进一步查看程序是不是这个用户启动的,后来干脆在这个用户的.bash_profile文件中添加命令:

ulimit -c unlimited

重新登录后,ulimit -c已经是unlimited了,说明设置的没有问题。

三 保存位置排查

查看core_pattern 配置:(如果配置了路径,需要检查保存路径是否有写权限)

cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

发现配置和以前不一样,所以临时改了下,改成:

echo  "core-%e-%p-%t" > /proc/sys/kernel/core_pattern

果然再次运行程序可以在可执行文件所在的目录生成core文件。如果我们想让core文件固定产生在一个目录中,可以在上面的配置中加上路径即可。 比如:

echo "/tmp/core-%e-%p-%t" >/proc/sys/kernel/core_pattern

%% – 符号% %p – 进程号 %u – 进程用户id %g – 进程用户组id %s – 生成core文件时收到的信号 %t – 生成core文件的时间戳(seconds since 0:00h, 1 Jan 1970) %h – 主机名 %e – 程序文件名

这样更改只是临时的,要想永久生效可以通过更改配置文件:

vim /etc/sysctl.conf
添加一行:kernel.core_pattern=core-%e-%p-%t

执行:sysctl -p 让配置立刻生效。 写个测试代码:

#include <stdio.h>
  
int main(int argc ,char * argv[])
{
        printf("hello core\n");
        int * p = NULL;
        *p = 2;
        return 0;
}

编译和执行:

gcc 1.c && a.out

生成core文件:

-rw------- 1 root root 499712 Oct 20 22:18 core-a.out-252068-1634739501

Linux 手册中可能没有core文件原因:

core 文件所在的路径没有写权限。

core文件已经存在,而且有超过一个硬链接,链接到这个文件。

磁盘满了或者inode使用完了,或者文件系统以只读方式挂载,或者此用户使用的空间已经达到了限额。

ulimit -c 设置为0,所以没有core。

可执行权限没有可读权限,所以无法镜像其内存。

正在执行的程序被设置了set-user-id 或(set-group-id)导致拥有程序的用户id或用户组id和执行时候的不同。

proc/sys/kernel/core_pattern 和/proc/sys/kernel/core_uses_pid 被设置为0,/proc/sys/kernel/core_uses_pid为1标识需要在core文件有加.pid的后缀,设置为0时不加。

四 原来配置怎么回事

centos8的默认配置又是什么那?

|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

看下手册说明:

 Since kernel 2.6.19, Linux supports an alternate syntax for the
       /proc/sys/kernel/core_pattern file.  If the first character of
       this file is a pipe symbol (|), then the remainder of the line is
       interpreted as the command-line for a user-space program (or
       script) that is to be executed.

即从2.6.19内核版本以后,core的设置可以通过管道传递给用户的程序,这个程序必须写绝对路径,以空格分割后面传递的参数。后面用到的%P和前面的是一样的,标识进程号。

注意:

这个程序以root用户和root用户组作为执行的用户和用户组,但是不会带来特殊权限绕过。

简单来说,core通过管道的方式被/usr/lib/systemd/systemd-coredump 程序处理了。默认情况下core被以LZ4压缩的格式放置在/var/lib/systemd/coredump/ 目录中;特意排查下没有core的主机确实如此,如下:

简单点,可以通过命令查看最近5个core文件:

coredumpctl list | tail -5

说明:

The information shown for each core dump includes the date and time of the dump, the PID, UID, and GID of the dumping process, the signal number that caused the core dump, and the pathname of the executable that was being run by the dumped process

对于我们习惯core在当前文件产生,而且是非压缩的来说,这种压缩方式还挺难用,不过linux系统提供了一个命令,可以把core文件根据pid转存到当前目录,如下:

coredumpctl dump 92362 -o core

把pid为92362 的进程的core文件转存到本目录的core。 如果你要说我就喜欢原来的方式,也可以通过如下命令进行更改:

 # echo "kernel.core_pattern=core.%p" > \
                          /etc/sysctl.d/50-coredump.conf
#/lib/systemd/systemd-sysctl 

临时的可以如下改下:

sysctl -w kernel.core_pattern="%e-%s.core"

和我们上面的改法没有实质的差别。

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: