我们有一个服务器(用C和C++编写),它当前捕获一个SEGV并将一些内部信息转储到一个文件中.我想生成一个核心文件,并在我们捕获SEGV时将其写入磁盘,因此我们的支持代表和客户不必为ulimit大惊小怪,然后等待崩溃再次发生以获得核心文件.我们过去曾使用过中止功能,但它受到ulimit规则的约束并没有帮助.
我们有一些读取/ proc/pid/map并手动生成核心文件的遗留代码,但它已经过时了,并且看起来不太便携(例如,我猜它在我们的64位中不起作用)编译).在Linux进程中生成和转储核心文件的最佳方法是什么?
谷歌有一个库,用于从名为google-coredumper的正在运行的进程中生成coredump.这应该忽略ulimit和其他机制.
生成核心文件的调用的文档在这里.根据文档,似乎在信号处理程序中生成核心文件是可行的,但不能保证始终有效.
我看到了pmbrett的帖子,并认为"嘿,很酷",但在我的系统(Gentoo)的任何地方找不到该实用程序.
所以我做了一些刺激,发现GDB有这个选项.
gdb --pid=4049 --batch -ex gcore
似乎对我来说很好.
它不是非常有用,因为它捕获了当时正在使用的最低功能,但它在那之外仍然做得很好(没有内存限制,使用它来转储firefox进程的350M快照)