我的工作是一台PC运行CentOS作为其操作系统。我还在嵌入式操作系统上工作。
在我的PC上,我成功地在分段错误上创建了一个核心转储文件,方法是更改:
但是在嵌入式系统上没有任何工作-核心转储是不生成的!可能是什么原因?
如果有关系,我想要转储的应用程序是用C++编写的。
如何才能在嵌入式系统上获得核心转储?
我做了一个小的崩溃程序,核心转储是从崩溃程序生成的,但不是为我所需要的!所以问题不在O.S上,而是在具体的计划上。我发现在将-g可执行文件/库文件发送到嵌入式系统之前,我们会删除它们。我对我的崩溃程序也做了同样的操作,而这个程序仍然产生核心转储。
发布于 2011-07-24 20:04:42
您确定您的嵌入式系统上的内核支持核心转储吗?可以在内核构建(参考)中禁用该特性,在这种情况下,您可能不得不使用类似于谷歌-核心服务器的东西来伪造它。
发布于 2011-07-28 12:50:55
好的,
当我在电脑上检查程序时,我犯了一个小错误,我用的是另一个信号,而不是嵌入式系统。对于自定义信号处理程序来说,为什么没有核心转储,仍然存在一个问题。解决方案在其中一个链接中:
不幸的是,如果应用程序配备了自定义的信号处理程序,则不会生成核心转储,因为它只由默认的信号处理程序生成。如果应用程序具有自定义信号处理程序,请在开始调试之前禁用它,否则将不会生成核心转储。Internet中的一些源提到,在异常发生后,恢复信号处理程序中的默认信号处理程序,并在回送中再次发送信号处理程序可能会触发核心转储。在我所做的测试中,它确实生成了一个核心转储,但我在核心转储中看到的唯一东西是我的处理程序执行的代码(即对信号和杀死的调用),所以这对我没有帮助。也许在其他平台上,这个技巧效果更好。
在我的平台上,它可以工作-另一个解决方案是在信号处理程序中生成核心转储。我听说gcore可以做到这一点,而使用windows核,我得到了一个不兼容错误。
发布于 2011-07-24 20:04:40
我看到了两个可能的信息来源,它们都指向/etc/security/limits.conf文件:
Linux禁用核心转储 -是的,我知道您希望启用核心转储,但这可能有助于反向启用核心转储的CentOS -另一个指向limits.conf的源代码。
https://stackoverflow.com/questions/6809227
复制相似问题