了解coredump

因为有运行环境产生coredump问题,之前也没怎么接触这一块,所以先记录学习一下基本操作

os坏境

[root@localhost ~]# cat /etc/.productinfo 
KYLIN Linux Advanced Server
Release V10(SP1)/(Tercel)-sw64-Build23-20210810-GFB
[root@localhost ~]# 

这里我们只了解如何检查以及自定义程序运行过程中产生coredump的情况

1. 检查coredum文件开关

使用ulimit -c命令查看core文件的开关。返回值为0表示关闭了这个功能,则不会产生coredum文件。若未开启,则使用ulimit -c unlimited开启即可

[root@localhost ~]# ulimit -c 
unlimited
[root@localhost ~]#  

这样的设置只是暂时,重启机器会失效,最好的办法就是写入系统配置文件中,即/etc/profile

[root@localhost ~]# echo "ulimit -c unlimited" >> /etc/profile
[root@localhost ~]# source /etc/profile

2. 设置core文件生成路径

[root@localhost ~]# cat /proc/sys/kernel/core_uses_pid 
1
[root@localhost systemd]# cat /proc/sys/kernel/core_pattern 
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
[root@localhost systemd]# echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 
[root@localhost ~]# cat /proc/sys/kernel/core_pattern 
/corefile/core-%e-%p-%t
[root@localhost ~]# mkdir /corefile

/proc/sys/kernel/core_uses_pid :主要用于控制文件名是否添加pid作为扩展名。

core_pattern默认被配置成以|管道字符开头的字符串,意味着程序的coredump信息将会作为标准输入交由systemd-coredump程序进行处理。systemd-coredump默认会为所有进程在/var/lib/systemd/coredump目录下以特定的压缩格式生成core文件。

/proc/sys/kernel/core_pattern:控制core文件保存位置和文件名格式。%e表示可执行程序的文件名,%p表示core dump进程id,%t表示产生coredump的时间。

3. 测试一下

[root@localhost ~]# cat test.c 
#include <stdio.h>
#include <stdlib.h>

int crash()
{
    char *crash_info = "crash!!!";

    crash_info[1] = 'D';

    return 0;
}

int main()
{
    crash();

    return 0;
}
[root@localhost corefile]# gcc -g test.c -o test
[root@localhost corefile]# ./test 
Segmentation fault (核心已转储)
[root@localhost corefile]# ls
core-test-3194981-1632201352  test  test.c
[root@localhost corefile]# gdb test
GNU gdb (GDB) 8.2.1 Penv. of 0x9916-v1.0 by xiewb 20200623
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "sw_64-sunway-linux-gnu".
Type "show configuration" for configuration details.
..
Reading symbols from test...done.
(gdb) ru
Starting program: /corefile/test 

Program received signal SIGSEGV, Segmentation fault.
0x0000000120000580 in crash () at test.c:8
8	    crash_info[1] = 'D';
(gdb) 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux中的core dump是指当程序由于意外错误或异常而崩溃时,系统将程序的内存内容转储到一个文件中,以便后续进行分析。下面是关于如何分析Linux core dump的步骤: 1. 确定core dump文件的位置:默认情况下,core dump文件保存在程序的当前工作目录。你可以使用`ulimit -c`命令来检查核心转储文件的大小限制,或者使用`sysctl kernel.core_pattern`命令查看核心转储文件的位置和名称模式。 2. 确保系统已经安装了相应的调试工具:在分析core dump之前,你需要安装GDB(GNU调试器),它是一个常用的用于调试程序和分析core dump的工具。使用`gdb`命令可以启动GDB。 3. 使用GDB加载core dump文件:在GDB命令行中,使用`gdb <程序名称> core`命令来加载core dump文件。这将打开GDB并加载core dump文件供分析。 4. 分析core dump文件:一旦core dump文件被加载到GDB中,你就可以进行分析了。你可以使用`bt`命令查看程序崩溃时的堆栈跟踪信息,这将有助于定位程序中的错误。你还可以使用其他GDB命令来检查变量的值,查找内存泄漏等。 5. 修复错误并重新编译程序(可选):根据core dump的分析结果,你可以找到程序中的错误并进行修复。之后,你可以重新编译程序并进行测试,以确保问题已解决。 总结起来,通过分析Linux core dump,我们可以确定程序崩溃的原因,并找到解决问题的方法。使用GDB调试工具可以帮助我们更深入地了解程序内部的情况,从而提高代码的质量和稳定性。 ### 回答2: 在Linux系统中,coredump是指在程序发生异常导致崩溃时生成的包含程序内存和寄存器状态等信息的文件。通过分析coredump,我们可以了解程序崩溃的原因,从而进行故障排查和问题修复。 首先,我们需要使用gdb工具来分析coredump文件。可以通过以下命令来加载coredump文件: gdb 可执行文件路径 core文件路径 然后,我们可以使用gdb提供的一系列命令进行分析,如下: 1. bt:打印出崩溃时的函数调用栈,可以查看崩溃发生的位置和函数调用关系; 2. info registers:显示程序崩溃时寄存器的状态,包括程序计数器、堆栈指针等,可以帮助我们了解程序崩溃时寄存器的值; 3. print 变量名:打印出指定变量的值,可以了解程序崩溃时变量的取值情况; 4. x/地址:打印出指定地址的内存内容; 5. info sharedlibrary:显示程序崩溃时加载的动态链接库信息; 6. source 源代码路径:加载源代码文件,可以查找对应的源代码以进行分析。 通过以上命令,我们可以逐步了解coredump文件中的信息,找出程序崩溃的原因。常见的导致程序崩溃的原因包括空指针引用、数组越界、内存泄漏等。根据不同情况,我们可以调试代码并修复问题。 总而言之,分析coredump是一种定位和解决程序崩溃问题的重要方法,通过分析coredump文件,我们可以了解程序崩溃的原因,并根据相应的信息进行修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值