当前位置: 首页 > 面试题库 >

为什么生成核心转储文件?

段干跃
2023-03-14
问题内容

有时,当我运行代码时,用Ctrl+
终止程序会生成一个核心转储文件\。文件名的格式为core.*。该程序不会突然终止,并且没有分段错误。我认为这是SIGQUITSIGABRTSIGSEGV。如果我尝试Ctrl+
CCtrl+ Z,则不会生成。

谁能说出为什么仅在按Ctrl+ 时才生成\?如何避免生成此核心转储文件?核心转储文件有什么用?


问题答案:

当进程由于程序故障而被操作系统终止时,进程将转储核心。发生这种情况的最典型原因是因为程序访问了无效的指针值。鉴于您有一个零星的转储,很可能您使用的是未初始化的指针。

您可以张贴导致故障的代码吗?除了模棱两可的概括之外,很难在不实际看到代码的情况下猜测出什么问题了。

至于什么是核心转储,请查看以下Wi​​kipedia文章:

  • http://en.wikipedia.org/wiki/Core_dump


 类似资料:
  • 问题内容: 每次我的应用程序崩溃时,都不会生成核心转储文件。我记得几天前,它 是 在另一台服务器 上 生成的。我正在使用bash屏幕运行应用程序,如下所示: 如您所见,如果要生成核心转储,则在使用哪个选项很重要,但是当遇到分段错误时,它仍然不会生成。我该如何运作? 问题答案: 确保当前目录(崩溃时可能会更改目录)是可写的。如果服务器调用,则该目录必须是该用户可写的。 同时检查。这可能会将核心转储重

  • 问题内容: 无论如何,当JVM崩溃时,是否有生成内核/堆转储文件的信息?由于这些文件通常对于查找代码中的错误非常有帮助。 问题答案: 使用以下JVM选项: JVM会将堆的内容转储到指定目录中的文件中。请注意,这仅在引发时发生,因为如果JVM因其他原因而崩溃,则确实不需要转储。 编辑:“布尔选项用-XX:+打开,而用-XX:-关闭。” docs

  • 问题内容: 运行C程序时,它显示 “((核心转储)”), 但是在当前路径下看不到任何文件。 我已经设置并验证了: 我也试图找到一个名为“ core”的文件,但是没有得到core dumped文件? 任何帮助,我的核心文件在哪里? 问题答案: 阅读/usr/src/linux/Documentation/sysctl/kernel.txt。 [/ proc / sys / kernel /] cor

  • 问题内容: 我在Linux中有一个进程出现分段错误。我如何告诉它在失败时生成核心转储? 问题答案: 这取决于您使用的外壳。如果使用的是bash,则ulimit命令控制与程序执行有关的一些设置,例如是否应该转储core。如果您输入 那么这将告诉bash它的程序可以转储任何大小的内核。您可以根据需要指定诸如52M的大小,而不是无限制的大小,但是实际上,这不是必需的,因为核心文件的大小可能永远不会成为您

  • 问题内容: 每当进程崩溃时,我都想创建一个核心转储。目前,我正在采用这种方法: 使用gcc / g ++的“ -g”构建程序的特殊“调试”版本。 执行“ ulimit -c unlimited” 现在,只要程序崩溃,我们就获得核心转储。 但我想减少步骤数,以便: 应始终创建核心转储。即使是“发布”版本。不应要求用户手动执行命令“ ”。 该核心转储的回溯应该能够给出调用的文件,函数,行号。那是人类可

  • 问题内容: 我们有一台服务器(用C和C ++编写),当前可以捕获SEGV并将一些内部信息转储到文件中。我想生成一个核心文件,并在捕获SEGV时将其写入磁盘,因此我们的支持代表和客户不必大惊小怪的ulimit,然后等待崩溃再次发生才能获得核心文件。过去我们使用过abort函数,但是它受ulimit规则的约束,无济于事。 我们有一些旧的代码可以读取/ proc / pid / map并手动生成一个核心