当前位置:   article > 正文

core分析_core文件

core文件

2、CORE分析
经过上面的铺垫,步入正题:如何进行core文件分析。在这之前,还需要简单介绍一些相关的知识:

2.1、CORE产生原理
应用程序在运行过程中由于各种异常导致退出,在满足一定条件下产生一个core文件。

通常core文件包含了程序运行时内存、寄存器状态、堆栈指针、内存信息以及函数调用堆栈信息。

core就是程序当前工作转改存储生成的一个文件,通过工具分析这个文件,可以辅助定位异常。

异常指针访问等异常会产生信号,内核在收到异常信号时产生core。

int get_signal(struct ksignal *ksig)
{
...
    for (;;) {
        struct k_sigaction *ka;
...
        signr = dequeue_signal(current, &current->blocked, &ksig->info);
...
        /* Trace actually delivered signals. */
        trace_signal_deliver(signr, &ksig->info, ka);
...
        if (sig_kernel_coredump(signr)) {
            if (print_fatal_signals)                        /*可以通过kernel.print-fatal-signals = 1进行设置,对应的节点是/proc/sys/kernel/print-fatal-signals。*/
                print_fatal_signal(ksig->info.si_signo);    /*打印当前信号及当前场景的栈信息。*/
            proc_coredump_connector(current);
            do_coredump(&ksig->info);
        }
...
    }
    spin_unlock_irq(&sighand->siglock);

    ksig->sig = signr;
    return ksig->sig > 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

core关注的信号列表

#define sig_kernel_coredump(sig)    siginmask(sig, SIG_KERNEL_COREDUMP_MASK)

  #define SIG_KERNEL_COREDUMP_MASK (\
    rt_sigmask(SIGQUIT) | rt_sigmask(SIGILL) | \
    rt_sigmask(SIGTRAP) | rt_sigmask(SIGABRT) | \
    rt_sigmask(SIGFPE) | rt_sigmask(SIGSEGV) | \
    rt_sigmask(SIGBUS) | rt_sigmask(SIGSYS) | \
    rt_sigmask(SIGXCPU) | rt_sigmask(SIGXFSZ) | \
    SIGEMT_MASK )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

各信号含义如下

signal.png

2.2、CORE参数配置
coredump文件默认存储位置与可执行文件在同一目录下,文件名默认为core.pid。

可以通过/proc/sys/kernel/core_pattern进行设置。

参数 含义
%p 出Core进程的PID
%u 出Core进程的UID
%s 造成Core的signal号
%t
出Core的时间,从1970-01-0100:00:00开始的秒数
%e 出Core进程对应的可执行文件名
通过echo “core-%e-%p-%s-%t” > /proc/sys/kernel/core_pattern。

还可以改变core存储路径:echo “/sbc/bin/log/core.%p” > /proc/sys/kernel/core_pattern

通过配置coredump_filter可以选择需在coredump的时候,将哪些内容dump到core文件中。

coredump_filter比特位
含义
bit 0 anonymous private memory
bit 1 anonymous shared memory
bit 2 file-backed private memory
bit 3 file-backed shared memory
bit 4 ELF header pages in file-backed private memory areas (it is effective only if the bit 2 is cleared)
bit 5 hugetlb private memory
bit 6
hugetlb shared memory
bit 7 DAX private memory
bit 8 DAX shared memory
coredump_filter的默认值是0x33(SBC额外设置了bit6,即0x73),也即发生coredump时会将所有anonymous内存、ELF头页面、hugetlb private memory内容保存。。

core文件大小设置,建议在进程初始化时通过setrlimit系统调用自定义设置,不是非常推荐ulimit -c的方式设置。

通过以下命令查看进程core limit是否符合预期:

[root@localhost build_sbc_dpdk]# cat /proc/5692/limits

Limit                     Soft Limit           Hard Limit           Units

Max cpu time              unlimited            unlimited            seconds

Max file size             unlimited            unlimited            bytes

Max data size             unlimited            unlimited            bytes

Max stack size            1048576              1048576              bytes

Max core file size        unlimited            unlimited            bytes       #如果此行为0,说明不会产生core

Max resident set          unlimited            unlimited            bytes

Max processes             256254               256254               processes

Max open files            1024                 1024                 files

Max locked memory         65536                65536                bytes

Max address space         unlimited            unlimited            bytes

Max file locks            unlimited            unlimited            locks

Max pending signals       256254               256254               signals

Max msgqueue size         819200               819200               bytes

Max nice priority         0                    0

Max realtime priority     0                    0

Max realtime timeout      unlimited            unlimited            us
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

2.3、CORE文件分析
通过以下命令行查看core文件:gdb [exec file] [core file] # 注意gdb版本建议和编译链一致,否则堆栈回溯时可能不准确。

例如: gdb791 versions_physical_SPLAT_Release_bgw core.3716

分析core文件时的常用命令:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/152563
推荐阅读
相关标签
  

闽ICP备14008679号