Linux core dump文件生成与使用

一、说明

在前一家公司经常测出一些缓冲区溢出导致进程挂掉的问题,开发经常要求在调试模式进行测试,生成core文件给他们定位问题。

当时的调试模式启动只是修改某些配置文件重新启动即可,所以在很长一段时间内并不知道到底要如何生成core文件及core文件如何使用。

二、配置允许生成core文件

临时配置使用ulimit命令进行操作即可:

# 查看当前用户core文件配置情况
# 0表示允许core文件大小为0,亦即不允许生成
ulimit -c

# 限制core文件大小
# 禁止生成core文件
ulmit -c 0
# 限制core文件大小100块
ulimit -c 100
# 不限制core文件大小
ulimit -c unlimited

要永久生效则修改配置文件/etc/security/limits.conf,使用类似如下形式进行配置:

*               soft    core            unlimited

三、直接的core文件生成

3.1 通过kill触发生成

# 查看当前core文件大小限制
ulimit -c
# 设置成不限制大小
ulimit -c unlimited
# 再次查看core文件大小限制
ulimit -c

# 新启动一个bash进程
bash
# 查看当前bash的pid
echo $$
# 将该进程kill掉,触发core文件生成
kill -s SIGSEGV $$
# 确认core文件确实已经生成
ll

使用gdb查看core文件即可定位到出错行,如下图。

3.2 使用gdb直接生成

# 查看当前bash的pid
echo $$
# 通过pid进行gdb调试。为了通用性这里直接使用$$
gdb -p $$
# 生成core文件。在gdb内部输入
generate-core-file
# 退出gdb。在gdb内部输入
quit
# 确认退出gdb。在gdb内部输入
y
# 确认当前目录下有core文件生成
ls -l | grep $$

3.3 使用gcore生成

# 直接生成当前bash进程的core文件
gcore $$
# 确认core文件已在当前目录下生成
ls -l | grep $$

四、自己代码中core文件的使用

使用core文件的主要目的是为了分析定位程序运行出错的原因、位置,第三大节中介绍的几种方法是可以生成core文件,但这不是程序哪里出错生成的core,这似乎没什么意义。

我们这里以一个

将以下代码保存成test.c:

#include <stdio.h>

int main()
{
    printf("calc start...\n");
    int value = 1/0;
    printf("calc finished.\n");
    return value;
}

生成core文件并调试:

# 设置core文件大小限制
ulimit -c unlimited
# 编译文件。-g将源代码附加到生成的二进制文件中,这样后边gdb定位出错位置时才能显示源代码行
gcc test.c -o test -g
# 查看当前文件
ls -l
# 执行程序触发生成core文件
./test
# 查看确认core文件生成
ls -l
# 使用gdb进行调试。第一个参数是生成core文件的可执行程序,第二个参数是生成的core文件
gdb test core.xxx

可以看到可以直接定位到导致出错的代码处:

参考:

https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/

原文地址:https://www.cnblogs.com/lsdb/p/12192768.html

时间: 2024-10-02 15:10:39

Linux core dump文件生成与使用的相关文章

linux下生成core dump文件方法及设置

core dump的概念: A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed). In practice, other key pieces of program state are usually dumped at the s

linux下生成core dump文件方法及设置【转】

转自:http://blog.csdn.net/mrjy1475726263/article/details/44116289 源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has te

gdb调试常用实用命令和core dump文件的生成(转)

1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxxx的文件 2.调试core dump文件 生成了core.xxx文件以后 $  gdb ./应用程序  core.xxxx 就会恢复现场到你的程序崩溃的那一刻 (gdb)bt          //这个命令会列出程序崩溃时的堆栈信息,一层一层会有标号  #0  #1  #2 ....... 如果你要查看

Segment fault及LINUX core dump详解

源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed). In practice, other key pieces of

Linux使用笔记: 定制core dump文件的文件名

在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要使用ulimit命令更改coredump的设置: ulimit -c unlimited 上面的命令表示在程序异常时产生core dump文件,并且不对core dump文件的大小进行限制. 上述设置只是使能了core dump功能,缺省情况下,内核在coredump时所产生的core文件放在与该程

linux 下如何打开core dump文件开关

dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息.在window下,要能生成dump文件,需要自己编写相应的代码.不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了! 在linux下面就简单的许多.只要打开相应的开关,linux会自动在程序crash时生成相应的core文件.这个文件和window下的dump文件类似. 下面是简单的一些步骤:1.查看当前是否已经打开了此开关  通过命令:ulimit -c 如果输出为 0 ,则代表没有打

Ubuntu16.04下写的Qt程序,调试时没问题,运行时偶现崩溃 (需要在运行时生成core dump文件,QMAKE_CC += -g)

记录一下 Ubuntu16.04下写的Qt程序,调试时没问题,运行时偶现崩溃 需要在运行时生成core dump文件 首先在pro结尾里加入 QMAKE_CC += -g QMAKE_CXX += -g QMAKE_LINK += -g 在终端输入 ulimit -c 显示为 0 然后输入 ulimit -c unlimited 继续在终端运行编写的程序 出错后,会在当前目录生成 core 文件 然后在终端执行 “gdb 你的程序名 core” 然后输入 bt 对该错误进行跟踪调试 (gdb)

Linux上Core Dump文件的形成和分析

原文: http://baidutech.blog.51cto.com/4114344/904419 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量. 凡事皆有两面性,OS在出Core

Linux core dump 分析及相关调试

core是core dump文件,是linux服务器的一种机制.core是个程序的严重问题,会致使程序直接挂掉,需要恢复. 需要注意的东西 在程序挂掉的过程中,会纪录程序的内存信息和cpu调用堆栈信息,当程序占用大量内存的时候,比如40G,那core文件可能会达到60G多,那写文件会持续数十分钟,这么长时间流量都会损失,并且写大文件对wio的占用特别大,严重影响本台服务器的其他服务,对于在线服务,会用很多超时,或者严重的是一段时间无法提供服务.所以,core文件监控,大小控制也很重要. 产生的原