最近,我注意到应用程序生成的核心转储的大小有所增加。最初,它们的大小约为 5MB,包含大约 5 个堆栈帧,现在我的核心转储超过 2GB,其中包含的信息与较小的转储没有什么不同。
有什么方法可以控制生成的核心转储的大小吗?它们不应该至少小于应用程序二进制文件本身吗?
二进制文件是这样编译的:
- 在带有调试的发布模式下编译
符号(即 -g 编译器选项
海湾合作委员会)。
- 调试符号被复制到
单独的文件并从
binary.
- 添加了 GNU 调试符号链接
到二进制文件。
在应用程序的开头,有一个调用setrlimit
这将核心限制设置为无穷大——这是问题所在吗?
是的 - 不要分配太多内存:-)
核心转储包含应用程序地址空间的完整映像,包括代码、堆栈和堆(malloc 的对象等)
如果您的核心转储>2GB,则意味着您在某个时候分配了那么多内存。
您可以使用 setrlimit 设置核心转储大小的下限,但可能会导致核心转储无法解码(因为它不完整)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)