C ++禁用堆栈帧下面的异常

时间:2015-10-16 22:42:45

标签: c++

有没有办法让异常不会在某个堆栈帧之上传播,同时又不会丢失堆栈信息?

IE,

int foo() {
   throw 3;
}

int bar() {
   // do something here
   foo();
}

int main() {
   try {
      bar();
   } catch(...) {
      std::cout << "Caught";
   }
}

我想让它在'throw 3'调用时终止,而不能被main捕获。

这可能吗?

1 个答案:

答案 0 :(得分:4)

只需在函数声明和定义

之后添加throw()
#include <iostream>

void* g_pStackTrace = NULL;

int foo() throw();

int foo() throw() {
   g_pStackTrace = <stack_trace_function_call>;
   throw 3;
}

int bar() {
   // do something here
   foo();
   return 0;
}

int main() {
      bar();

      if (g_pStackTrace != NULL)
      {
           // Work with our stack
      }
}

这会阻止你的投掷电话

不同操作系统中的堆栈跟踪功能

backtrace_symbols(3) - linux,mac osx

CaptureStackBackTrace(...) - windows

Live demo