【发布时间】:2016-07-01 04:55:09
【问题描述】:
我正在运行 ubuntu 14.04。我跑了
$ulimit -c unlimited
核心转储已启用,当我触发核心转储时,我可以在我的 C 应用程序目录之一中生成“核心”文件。在核心转储期间,我可以在 shell 中看到以下内容:
21876 Segmentation fault (core dumped) | ./stack6
但是,我触发了另一个目录中另一个 C 应用程序的核心转储,但它不会生成“核心”文件。我在此应用程序的核心转储期间看到的消息是:
21056 Segmentation fault (core dumped) | ./stackN
我很确定这不是目录权限的问题。为什么我的第二个应用程序没有生成“核心”文件?
更新 1: 描述核心转储的原因可能很容易,而不是发布代码供我们讨论。
代码如下所示:
static char buf[100];
int main() {
while (1) {
// get stdin and copy to buf, we maintain an index so that new inputs will be concatenated with the old one in the buffer.
}
}
核心转储是通过从标准输入提供大量输入来触发的。到目前为止,如果我只使用第二种方法进行编译,它总是会转储。我怀疑是二进制文件的构建方式导致了核心转储问题。
【问题讨论】:
-
贴出导致核心转储的代码
-
您注释掉的部分是相关的。显示整个代码。
-
代码很大...而且我无法更改代码(这意味着我无法调整它以生成核心转储)。除了使用 coredump 之外,还有其他方法可以调试这个程序吗(请注意,我更喜欢像 coredump 提供的那样重建崩溃状态)?