当前位置:  开发笔记 > 编程语言 > 正文

从进程内部转储Linux核心文件的好方法是什么?

如何解决《从进程内部转储Linux核心文件的好方法是什么?》经验,为你挑选了2个好方法。

我们有一个服务器(用C和C++编写),它当前捕获一个SEGV并将一些内部信息转储到一个文件中.我想生成一个核心文件,并在我们捕获SEGV时将其写入磁盘,因此我们的支持代表和客户不必为ulimit大惊小怪,然后等待崩溃再次发生以获得核心文件.我们过去曾使用过中止功能,但它受到ulimit规则的约束并没有帮助.

我们有一些读取/ proc/pid/map并手动生成核心文件的遗留代码,但它已经过时了,并且看起来不太便携(例如,我猜它在我们的64位中不起作用)编译).在Linux进程中生成和转储核心文件的最佳方法是什么?



1> Phillip Whel..:

谷歌有一个库,用于从名为google-coredumper的正在运行的进程中生成coredump.这应该忽略ulimit和其他机制.

生成核心文件的调用的文档在这里.根据文档,似乎在信号处理程序中生成核心文件是可行的,但不能保证始终有效.



2> Kent Fredric..:

我看到了pmbrett的帖子,并认为"嘿,很酷",但在我的系统(Gentoo)的任何地方找不到该实用程序.

所以我做了一些刺激,发现GDB有这个选项.

gdb --pid=4049 --batch -ex gcore

似乎对我来说很好.

它不是非常有用,因为它捕获了当时正在使用的最低功能,但它在那之外仍然做得很好(没有内存限制,使用它来转储firefox进程的350M快照)


仅供参考,"linux"命令'gcore'实际上是一个RedHat linux命令.它是一个bourne shell脚本,它调用gdb并使用gdb的gcore命令生成核心文件.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有