linux

linux 调试core文件

Posted by Liangjf on April 10, 2019

“🙉🙉🙉 ”

背景是人类首张黑洞照片,纪念一下,确实很震撼!!!

linux 调试core文件

core文件是应用程序崩溃那瞬间的现场,包括一些栈信息,异常信息等。为我们了解崩溃现场发生了啥,好修复它。

打开core dump功能

  • ulimit -c查看,若是0,表示未开启可以用以下命令临时开启 ulimit -c unlimited

  • 永久开启方式 /etc/security/limits.conf,按照以下方式修改

      liangjf@ubuntu:~/study/learn_gdb$ cat /etc/security/limits.conf 
      # /etc/security/limits.conf
      #
      #Each line describes a limit for a user in the form:
      #
      #<domain>        <type>  <item>  <value>
      *				soft	core	unlimited
    

使core文件加上进程pid

echo 1 >> /proc/sys/kernel/core_uses_pid

修改core文件的生成路径和名字

echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_patter

%e:可执行文件名字。%p:pid。%t:时间戳

例子

#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdio.h>
#define CORE_SIZE   1024 * 1024 * 500

int SetCoreFile()
{
    struct rlimit rlmt;
    rlmt.rlim_cur = (rlim_t)CORE_SIZE;
    rlmt.rlim_max  = (rlim_t)CORE_SIZE;
    if (setrlimit(RLIMIT_CORE, &rlmt) == -1)
        return -1; 
}

int fun1()
{
    /*访问非法内存,产生core文件*/
    int *ptr = NULL;
    *ptr = 10; 
    return 0;
}

void fun2()
{
	fun1();
}


void fun3()
{
    fun2();
    printf("fun3\n");
}

int main(int argc, char *argv[])
{
    SetCoreFile();

    fun3();

    return 0;
}