1. 会引起异常的几个原因(主要记录目前遇到过的几个问题)

  • 程序读取了无效的内存地址
  • 堆栈的溢出,比如无限循环导致那段内存溢出,比如把size为20的缓存拷贝到size为10的缓存块等
  • 无法申请到有效的内存
  • 多次删除同一块内存

2. 异常处理

2.1 SEH(Structured Exception Handling)

SEH是C语言的异常处理方法,主要使用如下方法处理异常,这个一般用于主动防御性代码中

try
{
throw 20;
}
catch (int e)
{
cout << "An exception occurred. Exception Nr. " << e << endl;
}

工作中我们应该会经常遇到随机,未知的异常崩溃,所以SEH提供了另一种方法处理异常

LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionPtrs)
{
// Do something, for example generate error report //.. // Execute default exception handler next
return EXCEPTION_EXECUTE_HANDLER;
} void main()
{
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); //< 一定要main程序开始后就注册异常处理函数 // .. some unsafe code here
}

2.2 CRT Error Handling(运行时异常)

运行时发生异常时,C++会调用terminate(),所以我们可以使用set_terminate捕获异常然后进行处理

void my_terminate_handler()
{
// Abnormal program termination (terminate() function was called) // Do something here // Finally, terminate program
exit(1);
} void main()
{
set_terminate(my_terminate_handler); //< 一定要main程序开始后就注册异常处理函数 terminate();
}

set_terminate类似的还有set_unexpected_set_purecall_handlerSetUnhandledExceptionFilter用法和上面一样,只是针对的是各自不同的异常

2.3 通过信号量来捕捉程序的异常

void sigabrt_handler(int)
{
// Caught SIGABRT C++ signal // Terminate program
exit(1);
} int main()
{
signal(SIGABRT, sigabrt_handler);
}

SIGABRT是一种异常类型,总共有以下7种:

  1. SIGINT 2. SIGILL 3. SIGFPE 4. SIGSEGV 5. SIGTERM 6. SIGBREAK 7. SIGABRT

3.最后推荐一个dump日志生成库 -- google breakpad

google breakpad 是一款开源的跨平台dump日志生成库,具体使用方法请自行查阅官网说明

  • 注: 以上记录仅限于windows单线程,如果是多线程请查看各自msdn说明,其它平台紧供参考

C++随机崩溃捕捉处理的更多相关文章

  1. VBA随机地牢生成

    无聊啊--于是,我想做一个随机地图. 但是我很懒,不想做. 但是身体很诚实. 这次是直接在Excel中制作的地图,但是,VB的执行效率很慢,我代码的效率也很慢,导致,一旦地图长宽稍大,就会出现好几分钟 ...

  2. Windows 程序 dump 崩溃调试

    Windows 程序捕获崩溃异常 生成dump 概述 事情的起因是,有个同事开发的程序,交付的版本程序,会偶尔随机崩溃了. 悲催的是没有输出log,也没有输出dump文件. 我建议他给程序代码加个异常 ...

  3. c# Linq Where 抛出异常 导致 程序崩溃

    Collection was modified; enumeration operation may not execute" 这次项目中遇到一个问题, 就是C#程序随机崩溃, 抛出上面的异 ...

  4. P3图片导致iOS9.3以下崩溃问题

    如果你刚刚升级了Xcode8,而你的项目的Deployment Target是iOS 9.3以下,运行iOS8的时候过了几十秒后crash到main函数,出现EXC_BAD_ACCESS,或者崩溃到i ...

  5. Android 应用程序升级到 5.0 需要注意的问题

    Android 5.0,代号 Lollipop,源码终于在2014年12月3日放出,国内一大批厂商跟进.最大的改变是默认使用 ART(Android Runtime) ,替换了之前的 Dalvik 虚 ...

  6. Android 学习笔记

    1.sleep(),wait(),notify(),notifyAll() sleep()是线程类的静态方法,阻塞线程一定时间后再次使线程处于可以被调度运行的状态wait(),notify(),not ...

  7. Mac OS X 背后的故事

    Mac OS X 背后的故事 作者: 王越  来源: <程序员>  发布时间: 2013-01-22 10:55  阅读: 25840 次  推荐: 49   原文链接   [收藏]   ...

  8. C++多线程调试和测试的注意事项

    在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开 ...

  9. STL Container和ATL智能包裹类的冲突

    STL Container和ATL智能包裹类的冲突 载自:http://www.codesky.net/article/200504/63245.html Article last modified ...

随机推荐

  1. Android中GridView、ListView 的 getChildAt() 方法返回null 问题

    开发的Android app用到了GridView或者ListView,通常使用getChildAt(int position)方法获取当前点击或者选中的View(即position对应的View). ...

  2. 解决Firefox访问12306"连接不受信任"的问题

    用Firefox访问12306.cn, 总是提示"This Connection is Untrusted", 曾经有个"Add Exception" 按钮, ...

  3. [转]整理jquery开发技巧

    1.创建一个嵌套的过滤器   1.$(jquery).filter(":not(:has(.selected))") //去掉所有不包含class为.selected的元素 2.使 ...

  4. 新浪 股票 API

    新浪期货数据接口 [例子]http://hq.sinajs.cn/list=M0豆粕连续 M0 返回值如下:var hq_str_M0="豆粕连续,145958,3170,3190,3145 ...

  5. 高性能MySQL第2,3章性能相关 回顾笔记

    1.  基准测试(benchmark)   不管是新手还是专家都要熟悉基准测试,benchmark测试是对系统的一种压力测试,目标是为了掌握在特定压力下系统的行为.也有其他原因:如重现系统状态,或者是 ...

  6. <meta http-equiv="X-UA-Compatible" content="IE=Edge">

    1.X-UA-Compatible X-UA-Compatible是IE8的一个专有<meta>属性,它告诉IE8采用何种IE版本去渲染网页,在html的<head>标签中使用 ...

  7. DataTable Javascript Link not working on 2nd page

    $(document).ready(function () { var otable = $('#tbl-resources').dataTable( { bJQueryUI: false, bFil ...

  8. csdn如何转载别人的文章

    1.找到要转载的文章,用chrome浏览器打开,右键选择审查元素 2.在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中 ...

  9. 8636 跳格子(dfs+记忆化搜索)

    8636 跳格子 该题有题解 时间限制:2457MS  内存限制:1000K提交次数:139 通过次数:46 题型: 编程题   语言: G++;GCC Description 地上有一个n*m 的数 ...

  10. hadoop pig入门总结

    在这里贴一个pig源码的分析,做pig很长时间没做笔记,不包含任何细节,以后有机会再说吧 http://blackproof.iteye.com/blog/1769219 hadoop pig入门总结 ...