在某些应用程序的开发过程中,我们需要在不完全停止程序执行的情况下获得完整的核心转储。
当然,有些条件会生成核心转储,其中可能无法安全地继续,但我们不是在谈论内存损坏等。
我想做的是向程序发送信号并生成一个完整的内核,而不会或对程序执行产生最小的影响
这可能吗? 如果是这样,怎么办?
看看这个谷歌图书馆,它可能会有所帮助: http://code.google.com/p/google-coredumper/
核心转储程序库可以编译到应用程序中以创建 正在运行的程序的核心转储 - 不终止。
Coredumpber适用于Linux,如果这是你的操作系统,显然是一个好主意。
对于其他类似Posix的系统,这样的东西应该可以正常工作:
#include <stdlib.h>
#include <process.h>
// Fork and abort for a core dump. This process keeps running.
if (fork() == 0) abort();
当然,必须将环境设置为在SIGABRT
上转储核心。 您也可以尝试raise(SIGTERM)
,就像kill -9
一样。