我遇到一个问题,我的应用程序在几天/几周后继续转储核心,但不幸的是,没有生成核心转储。
我们尝试设置ulimit -c unlimited
但没有成功,因此我们在代码本身中加入了setrlimit
功能,但也没有运气。最重要的是,我们也添加了MALLOC_CHECK_。
有趣的是,当我们尝试启动手动核心转储(使用kill -ABRT <pid>
)时,它确实生成了核心转储。
我可以在/var/log/message
kernel:[2302077.396021] myapp [22140]:segfault at 54552e42 ip 00000000f773f36f sp 00000000fffdc48c error 4 in ld-2.11.3.so [f7727000 + 1f000]
环境:sles11
有关如何使应用程序更可靠地生成核心转储的任何建议?
答案 0 :(得分:3)
许多当前系统都配置为不会留下核心转储(普通用户不知道如何处理它们)。
答案 1 :(得分:0)
我在SLES 11中遇到了同样的问题。除了给出的建议,特别是设置“ulimit -c unlimited”之外,还需要更多的东西:
修改/etc/security/limits.conf以添加以下行。然后再次注销然后确定。
* soft core unlimited
默认的内核核心模式是“/var/log/cores/%e/%p-%s-%t.core”。 (参见core(5)。)如果目录部分不存在,Linux将不会创建核心文件。因此,您需要创建“%e”位,这是二进制文件的名称,或者您可以更改模式。