我可以在Linux上配置进入核心转储的内容吗?我想获得类似Windows迷你转储的东西(应用程序崩溃时有关堆栈帧的最小信息)。我知道你可以使用ulimit
设置核心文件的最大大小,但这不允许我控制核心内部的内容(即不能保证如果我将限制设置为64kb它会转储最后16页的堆栈,例如)。
另外,如果可能的话,我想以编程方式(从代码中)设置它。
我查看了/proc/PID/coredump_filter
提到的man core
文件,但对于我来说,它看起来太粗糙了。
提供一些上下文:我需要微小的核心文件,原因有很多:我需要通过网络收集它们,用于众多(数千)客户端;此外,这些是具有少量SD卡的嵌入式设备,以及用于网络连接的GPRS调制解调器。所以任何超过200k的东西都是不可能的。
编辑:我正在开发一个运行linux 2.6.24的嵌入式设备。处理器是PowerPC。不幸的是,powerpc-linux目前在breakpad中不支持 ,所以google breakpad不是一个选项答案 0 :(得分:6)
我已经通过两种方式“解决”了这个问题:
strip
将其存储在安全的地方;从那里,我将使用add22line
从回溯(地址)保存的信息来了解问题发生的位置。这样我只需要存储几个字节。我仍然丢失可能很珍贵的信息(全球和地方变量内容,参数......)。我可以很容易地找出要转储的页面,但遗憾的是没有办法为正常的核心转储指定“dump-these-pages”(除非你愿意去修补maydump()
函数内核)。
现在,我对2种解决方案感到非常满意(总比没有好......)我的下一步行动将是: