即使进程正常运行,如何创建核心转储? [复制]

Posted

技术标签:

【中文标题】即使进程正常运行,如何创建核心转储? [复制]【英文标题】:How to create a core dump even if the process is normally running? [duplicate] 【发布时间】:2015-02-19 14:15:49 【问题描述】:

在 Linux 下,当进程崩溃时,会创建核心转储。

但是,当进程没有崩溃但看起来有问题时,我想创建一个核心转储。远程专家需要核心转储来分析。

在Windows下,我们可以通过任务管理器创建一个进程的dump文件,之后该进程还在运行。

Linux下可以吗?

【问题讨论】:

【参考方案1】:

您可以直接从命令行使用gcore 实用程序:

gcore [-o filename] pid

顺便说一句,如果您只想查看进程的堆栈跟踪,gstack 实用程序将完成这项工作。

这两个实用程序都带有gdb

【讨论】:

【参考方案2】:

您可以在您的代码中使用:

if (fork() == 0) abort();

【讨论】:

这可能不是最好的解决方案,但男孩很聪明:)【参考方案3】:

如果您想以编程方式执行此操作,请尝试使用 google-coredumper。他们的例子:

#include <google/coredumper.h>
...
WriteCoreDump('core.myprogram');
/* Keep going, we generated a core file,
 * but we didn't crash.
 */

【讨论】:

【参考方案4】:

拨打gdb,然后

attach pid
gcore

其中pid 是相关进程的进程ID。

【讨论】:

以上是关于即使进程正常运行,如何创建核心转储? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用正在运行的进程的共享内存收集核心转储

Linux 中的核心转储

崩溃后未创建进程核心转储

从附加到 ddd/dbx 的崩溃进程生成核心转储

如何调试阿帕奇?我在哪里可以找到核心转储

进程的 GDB 全内存转储