我想要一个C程序在某些情况下生成核心转储.这是一个在生产环境中运行的程序,不容易停止和重新启动以调整其他类型的调试代码.此外,由于它在生产环境中,我不想调用abort().调查中的问题不容易在非生产环境中复制.我想要的是程序,当它检测到某些问题时,自己产生核心转储,最好有足够的信息来重命名文件,然后继续.
void create_dump(void) { if(!fork()) { // Crash the app in your favorite way here abort() || (*((void*)0) = 42); } }
分叉进程然后让孩子崩溃 - 它会随时给你一个快照
另一种方法可能是使用Google Coredumper库.这会产生与fork + abort技术类似的结果,但是对于多线程应用程序会更好(在分叉之前暂停所有线程一段时间,这样它们就不会弄乱孩子).
例:
#include... WriteCoreDump('core.myprogram'); /* Keep going, we generated a core file, * but we didn't crash. */