文档章节

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

xloogson
 xloogson
发布于 2017/01/05 11:03
字数 220
阅读 61
收藏 0

公司的android代码里面有部分是native的,native代码偶尔会有崩溃。有些bug是偶现,很难解决。但是不解决应用直接闪退了,怎么巧妙的避开这种崩溃呢? 如下是一种思路。

#include <iostream>
#include <vector>
#include <thread>
using namespace std;
#include <string.h>
#include <signal.h>
#include <setjmp.h>


__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<std::thread> 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可以巧妙的避开可能的错误

© 著作权归作者所有

xloogson
粉丝 3
博文 10
码字总数 2536
作品 0
南汇
技术主管
私信 提问
C++抛出异常时无法捕捉到异常,致使程序崩溃

C++抛出异常时无法捕捉到异常,致使程序崩溃 @(代码排错)[抛出异常 无法捕捉异常] ----------[TOC] 情况一 下面代码导致了异常: 修改为下面的代码就可使代码正常: 情况二 下面代码导致了异...

i不歪
2015/11/10
23
0
C++ Primer 学习笔记(第五章:语句)

C++ Primer 学习笔记(第五章:语句) [TOC] 5.1 简单语句 空块的作用等价于空语句。 ----------------------------------- 5.2 语句作用域 5.3 条件语句 悬垂:else只与离他最近的尚未匹配的...

ShawnLue
2015/08/20
50
0
c++自定义异常处理机制

这两天我写了一个测试c++异常处理机制的例子,感觉有很好的示范作用,在此贴出来,给c++异常处理的初学者入门。本文后附有c++异常的知识普及,有兴趣者也可以看看。 下面的代码直接贴到你的c...

长平狐
2012/09/03
978
0
C++ new 关键字的 "new" 学习

以前动态申请内存,申请完后,总要判断指针是否为空,比如 const unsigned int iSize = 102410241024*1.8;char *p = new char[iSize];if(!p){ return ; //异常处理} 一直觉得这样没什么问题(...

余青木
2015/03/26
331
0
(转)Android平台的崩溃捕获机制及实现

作者简介:贾志凯,Testin崩溃分析(http://apm.testin.cn/)项目研发工程师,负责客户端SDK相关技术研发工作。5年移动互联网开发经验,曾任职于中科院、Symantec、Opera,对移动App的测试、分...

so1per
2016/01/18
4K
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
10
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
6
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部