每次我的应用程序崩溃时,都不会生成核心转储文件。我记得几天前,它 是 在另一台服务器 上
生成的。我正在使用bash屏幕运行应用程序,如下所示:
#!/bin/bash
ulimit -c unlimited
while true; do ./server; done
如您所见ulimit -c unlimited
,如果要生成核心转储,则在使用哪个选项很重要,但是当遇到分段错误时,它仍然不会生成。我该如何运作?
确保当前目录(崩溃时server
可能会更改目录)是可写的。如果服务器调用setuid
,则该目录必须是该用户可写的。
同时检查/proc/sys/kernel/core_pattern
。这可能会将核心转储重定向到另一个目录,并且 该
目录必须是可写的。更多信息在这里。
问题内容: 有时,当我运行代码时,用+ 终止程序会生成一个核心转储文件。文件名的格式为。该程序不会突然终止,并且没有分段错误。我认为这是不和。如果我尝试+ 或+ ,则不会生成。 谁能说出为什么仅在按+ 时才生成?如何避免生成此核心转储文件?核心转储文件有什么用? 问题答案: 当进程由于程序故障而被操作系统终止时,进程将转储核心。发生这种情况的最典型原因是因为程序访问了无效的指针值。鉴于您有一个零星
问题内容: 运行C程序时,它显示 “((核心转储)”), 但是在当前路径下看不到任何文件。 我已经设置并验证了: 我也试图找到一个名为“ core”的文件,但是没有得到core dumped文件? 任何帮助,我的核心文件在哪里? 问题答案: 阅读/usr/src/linux/Documentation/sysctl/kernel.txt。 [/ proc / sys / kernel /] cor
我想知道,当我们为客户提供新的更新时,是否有丢失这些文件的风险。如果有更好的解决方案,上传文件和获取文件链接之后,与.NET core请告诉我:)
我正在尝试将Java进程的Linux核心转储转换为堆转储文件,适合用Eclipse MAT进行分析。根据这篇博客文章,适应于较新的OpenJDK 12,我创建了一个核心转储,然后运行将转储转换为HPROF格式: 核心转储文件是22GB,而堆转储文件只有3MB,因此命令可能无法处理整个核心转储。此外,Eclipse MAT无法打开堆转储文件,并显示以下消息:
问题内容: 无论如何,当JVM崩溃时,是否有生成内核/堆转储文件的信息?由于这些文件通常对于查找代码中的错误非常有帮助。 问题答案: 使用以下JVM选项: JVM会将堆的内容转储到指定目录中的文件中。请注意,这仅在引发时发生,因为如果JVM因其他原因而崩溃,则确实不需要转储。 编辑:“布尔选项用-XX:+打开,而用-XX:-关闭。” docs
问题内容: 每当进程崩溃时,我都想创建一个核心转储。目前,我正在采用这种方法: 使用gcc / g ++的“ -g”构建程序的特殊“调试”版本。 执行“ ulimit -c unlimited” 现在,只要程序崩溃,我们就获得核心转储。 但我想减少步骤数,以便: 应始终创建核心转储。即使是“发布”版本。不应要求用户手动执行命令“ ”。 该核心转储的回溯应该能够给出调用的文件,函数,行号。那是人类可