gcc调试,分段故障(内核转储),但没有内核

gcc调试,分段故障(内核转储),但没有内核,c,debugging,gcc,C,Debugging,Gcc,以前,我会在没有核心的情况下获得分段错误,然后在compile命令中添加-ggdb,并在执行gcc之前在bash中执行此命令: ulimit -c unlimited 有一段时间一切都很好(我得到了一个内核),但是现在我得到了分段错误(内核转储)但是在发出gcc命令的目录中没有内核?它会去别的地方吗?我还能试什么 还有一点补充信息: OS:GentooLinux 在运行的内核中启用了Enable ELF core转储 该应用程序是一个用gtk编写的文本编辑器+ 回答: 我发现有两种方式: fi

以前,我会在没有核心的情况下获得
分段错误
,然后在compile命令中添加-ggdb,并在执行gcc之前在bash中执行此命令:

ulimit -c unlimited
有一段时间一切都很好(我得到了一个内核),但是现在我得到了
分段错误(内核转储)
但是在发出gcc命令的目录中没有内核?它会去别的地方吗?我还能试什么

还有一点补充信息:

  • OS:GentooLinux
  • 在运行的内核中启用了Enable ELF core转储
  • 该应用程序是一个用gtk编写的文本编辑器+
  • 回答: 我发现有两种方式:

  • find/-name“core”-ls
  • 正如托雷克所建议的那样:

    $strace./executable>output.txt 2>&1

    $grep chdir output.txt


  • 正如@JonathanLeffler所指出的,核心转储位于当前目录中

    您可以使用
    strace
    查看进程是否执行了chdir()。不幸的是,
    strace
    没有显示核心转储本身的位置,但是:

    $ cat crash.c
    int main(void) {
        chdir("/tmp");
        *(int *)0 = 0;
        return 0;
    }
    $ cc -o crash crash.c
    $ strace ./crash
    execve("./crash", ["./crash"], [/* 53 vars */]) = 0
    ... [lots of libc trace stuff snipped] ...
    chdir("/tmp")                           = 0
    --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} ---
    +++ killed by SIGSEGV (core dumped) +++
    Segmentation fault
    $ ls /tmp
    

    现在其中有一个core.pid文件。

    核心转储将位于正在运行的进程的当前目录中。该过程是否确实执行了
    chdir()
    ?“如果是这样的话,去它要去的地方。”乔纳森·莱弗勒,谢谢你的建议。该应用程序是一个用gtk+编写的文本编辑器。我编写的源代码中没有任何chdir()。为了安全起见(以防gtk+源代码中有内容),我运行它时只打开了两个选项卡,两个文件都在同一目录中(与可执行文件相同),仍然没有核心。
    core
    (5)手册页面解释了如何控制是否以及何时生成
    core
    文件。可能
    /proc/sys/kernel/core_pattern
    中的值指向不同的目录(我的系统管理员将我们的设置为在
    /tmp
    中生成唯一命名的文件)。也感谢您的帮助。我在我的主目录中找到了核心。使用strace显示对我的home dir执行了chdir()。我得进一步调查。谢谢