代码之家  ›  专栏  ›  技术社区  ›  Nick

最终分割错误块(C++)

  •  0
  • Nick  · 技术社区  · 15 年前

    我正在使用ncurses,每当我遇到segfault时,ncurses就不能正确地释放终端的控制(因为endwin()从未被调用)。我设置了一个信号处理器:

    void handler(int signum) {
        endwin();
        exit(EXIT_FAILURE);
    }
    

    但问题是segfult被忽略,而不是延迟到endwin()之后。我对C++是相当新的,可以像异常一样捕获分段,这样我就可以得到最后一个块了吗?或者有办法从处理器内部重新发送segfault吗?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Dialecticus    15 年前

    Segfault是未定义的行为。你必须找到它并修复它。不要担心ncurses没有释放终端,找到并修复错误。

        2
  •  0
  •   Paul Rubel    15 年前

    signal 手册页:

    根据POSIX,进程忽略SIGFPE、SIGILL后的行为是未定义的, 或不是由kill(2)或raise(3)产生的SIGSEGV信号。

    在赛格失误后做任何事都是疯狂的。就像撞车后启动的安全气囊,你继续开车,因为,嗯,你有一个安全气囊,它会让你在撞车时保持安全。用一个处理程序来处理不是办法。

    一种方法是让你的程序从文件中获取输入或者存根输出。你也可以试试 remotely attaching to a process with gdb . 从来没做过,但可能值得一试。

    推荐文章