【问题标题】:Unable to create a core file for my crashed program无法为我崩溃的程序创建核心文件
【发布时间】:2012-09-27 10:25:30
【问题描述】:

我使用的是 Ubuntu 12.04 LTS。我写了一个简单的程序如下创建崩溃

// null.c
#include<stdio.h>

int main()
{
   int *p = NULL;
   int k=*p;
   printf("%d",sizeof(0));
   return 0;
}

现在我使用“gcc -g null.c”运行 然后是 "./a.out" 和预期的输出。

Segmentation fault (core dumped)

现在我想使用 gdb 查看核心转储文件。我做了以下事情

  1. 我检查了当前目录,没有核心转储文件
  2. 我尝试将 /proc/sys/kernel/core_pattern 更改为内容“core.%e.%p”。但我无法写入文件。它说“Fsync 失败”。
  3. 我使用了“sudo vi /proc/sys/kernel/core_pattern”。仍然无法写入文件。

我想在当前目录中创建核心转储。现在该怎么办?

【问题讨论】:

    标签: linux file gdb coredump


    【解决方案1】:

    您需要使用以下命令调整核心转储大小限制:

    ulimit -S -c 最大核心转储大小

    该值以 Kb 为单位。

    【讨论】:

      【解决方案2】:

      您真正的问题似乎不是“我的核心转储在哪里”,而是“我如何修改/proc/sys/kernel/core_pattern”。

      sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern'
      

      应该可以解决问题。

      【讨论】:

      • root 用户获取操作不允许。
      【解决方案3】:

      您不需要使用核心模式。它只是以那种格式转储 %e.%p

      你需要做的是#ulimit -c 无限

      并检查#ulimit -a

      并确认核心文件大小是否设置正确。之后,您将获得 core.pid 作为核心。

      【讨论】:

        【解决方案4】:

        我的理解是使用 ulimit 不是永久的,即如果你重新启动,那么限制会回到 0。要拥有无限永久,你需要更改 /etc/security/limits.conf。同样对于核心模式等,更改/etc/sysctl.conf。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-24
          相关资源
          最近更新 更多