在某些应用程序的开发过程中,我们需要在不完全停止程序执行的情况下获得完整的核心转储。
当然,在某些情况下会产生核心转储,在这些情况下可能无法安全地继续,但我们不是在谈论内存损坏等。
我要做的是向程序发送一个信号并生成一个完整的内核,而不会或最小地影响程序执行
这可能吗?如果有怎么办?
请参阅此 Google 库,它可能会有所帮助:http ://code.google.com/p/google-coredumper/
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();
当然环境必须设置为 dump core on SIGABRT
。你也可以试试raise(SIGTERM)
,就是这样kill -9
。