为什么只在 ubuntu 的特定目录中生成核心转储文件

问题描述 投票:0回答:1

我写了一个示例 C 程序来生成核心转储。但这仅在特定目录 /var/crash 中执行时才会生成核心转储,但是在其他目录中执行时不会生成。为什么?我正在使用 ubuntu-20.

当我在 /var/crash 中运行程序时

/var/crash>./a.out 
Caught signal 11, generating core dump...
Aborted (core dumped)

/var/crash>ls /var/crash
_var_crash_a.out.1000.crash  a.out
/var/crash>

当我在我的主目录中运行时没有生成核心文件

/home/ubuntu>./a.out 
Caught signal 11, generating core dump...
Aborted (core dumped)
/home/ubuntu>
/home/ubuntu>ls
a.out                           ----> no core dump file generated
/home/ubuntu>

ulimit 值

/home/ubuntu>ulimit -c unlimited

我的核心转储生成器代码

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void crash_handler(int sig) {
  printf("Caught signal %d, generating core dump...\n", sig);
  fflush(stdout);
  abort();
}

int main() {
  struct sigaction sa;
  sa.sa_handler = crash_handler;
  sigemptyset(&sa.sa_mask);
  sa.sa_flags = SA_RESTART;

  if (sigaction(SIGSEGV, &sa, NULL) == -1) {
    perror("sigaction");
    exit(1);
  }

  int* p = NULL;
  *p = 42;

  return 0;
}



核心模式输出

/home/ubuntu>cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E
/home/ubuntu>
ubuntu gdb coredump
1个回答
0
投票

没有生成核心转储文件

你可能错了——消息说

core
生成的。

正如其他评论者所提到的那样,由于

/proc/sys/kernel/core_pattern
,它只是没有在当前目录中生成。

© www.soinside.com 2019 - 2024. All rights reserved.