如何try-catch住c++层的崩溃

2017-01-06 10:06:15来源:oschina作者:xloogson人点击



公司的android代码里面有部分是native的,native代码偶尔会有崩溃。有些bug是偶现,很难解决。但是不解决应用直接闪退了,怎么巧妙的避开这种崩溃呢?
如下是一种思路。
```
#include
#include
#include
using namespace std;
#include
#include
#include __thread jmp_buf jb; //__thread的作用可以保证每个线程一份.
void test1() {
char * p = NULL;
std::cout << *p << endl;
}void test() {
std::cout << "test" << std::endl;
int r = setjmp(jb);
if (r == 0) {
std::cout << "setjmp" << std::endl;
test1();
} else if (r == 1) {
std::cout << "longjmp" << r << endl;
return;
}
}void mysig(int a) {
std::cout << "sigaction:" << a << endl;
longjmp(jb, 1);
}
int main() {
signal(SIGSEGV, mysig);
signal(SIGBUS, mysig);
signal(SIGABRT, mysig);
signal(SIGFPE, mysig);
signal(SIGILL, mysig);std::vector all;
for (int i = 0; i < 30; i++) {
std::thread t(test);
all.emplace_back(std::move(t));
}
for (int i = 0; i < all.size(); i++) {
all[i].join();
}
}
```
利用setjmp和longjmp可以巧妙的避开可能的错误

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台