有没有办法让异常不会在某个堆栈帧之上传播,同时又不会丢失堆栈信息?
IE,
int foo() {
throw 3;
}
int bar() {
// do something here
foo();
}
int main() {
try {
bar();
} catch(...) {
std::cout << "Caught";
}
}
我想让它在'throw 3'调用时终止,而不能被main捕获。
这可能吗?
答案 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