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

C程序如何在不终止的情况下产生自身的核心转储?

如何解决《C程序如何在不终止的情况下产生自身的核心转储?》经验,为你挑选了2个好方法。

我想要一个C程序在某些情况下生成核心转储.这是一个在生产环境中运行的程序,不容易停止和重新启动以调整其他类型的调试代码.此外,由于它在生产环境中,我不想调用abort().调查中的问题不容易在非生产环境中复制.我想要的是程序,当它检测到某些问题时,自己产生核心转储,最好有足够的信息来重命名文件,然后继续.



1> Ana Betts..:
void create_dump(void)
{
    if(!fork()) {
        // Crash the app in your favorite way here
        abort() || (*((void*)0) = 42);
    }
}

分叉进程然后让孩子崩溃 - 它会随时给你一个快照


我的阅读建议分叉的孩子只获得当前的线程,而不是任何其他线程.这意味着您的核心转储将只包含有关当前线程的信息 - 而不是您运行的任何其他线程.如果您需要所有主题,则可以使用此主题:https://code.google.com/p/google-coredumper/

2> regnarg..:

另一种方法可能是使用Google Coredumper库.这会产生与fork + abort技术类似的结果,但是对于多线程应用程序会更好(在分叉之前暂停所有线程一段时间,这样它们就不会弄乱孩子).

例:

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

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有