相关疑难解决方法(0)

SEH在Linux中等效或如何处理OS信号(如SIGSERV)并继续保持

我目前正在开发一个单元测试框架,用户可以在其中创建测试用例并在框架中注册.

我还想确保如果任何用户测试代码导致崩溃,它不应该崩溃整个框架但应该被标记为失败.为了使这项工作,我编写了以下代码,以便我可以在沙盒功能中运行用户代码

bool SandBox(void *(*fn)(void *),void *arg, void *rc)
{
#ifdef WIN32
    __try
    {
        if (rc)
            rc = fn(arg);
        else
            fn(arg);
        return true;
    }
    __except (EXCEPTION_EXECUTE_HANDLER)
    {
        return false;
    }

#else
#endif
}
Run Code Online (Sandbox Code Playgroud)

这在Windows上运行得很好,但我希望我的框架是可移植的,为了这样,我想确保posix环境的类似功能.

我知道C信号处理程序可以拦截OS信号,但是将信号处理机制转换为SEH框架有一些我无法解决的挑战

  1. 即使我的程序收到信号,如何继续执行?
  2. 如何将执行控制从失败位置跳转到可以用于错误处理的块(类似于除外)?
  3. 我该如何清理资源?

另一种可能性是我在使用自己的信号处理程序在一个单独的线程上运行用户测试代码并从信号处理程序终止线程,但又不确定这是否可行.

所以在我超越之前,如果他们意识到解决这个问题/情况的更好解决方案,我希望得到社区的帮助.

c++ linux windows signals seh

9
推荐指数
1
解决办法
3416
查看次数

标签 统计

c++ ×1

linux ×1

seh ×1

signals ×1

windows ×1