- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Effective Exception Handling in Visual C++在C++中进行有效的异常处理出自CodeProject,原文链接:/Articles/207464/Exception-Handling-in-Visual-Cplusplus译:Sleepysleepysoft@2012年11月4日星期日介绍这篇文章描述的是捕获和处理运行在Windows下的Visual C++程序中异常与错误的标准技术。异常(或者说关键性错误、崩溃)一般来说是你的程序运行不正常,从面不得不停止运行的情况。比如说,如果你的程序访问一块无效的内存地址(如NULL指针)、无法分配一个Buffer(内存不足)、C语言库的运行时(C run-time libraries,CRT)发现一个错误,并且需要程序立即停止运行等等,这些情况下都会产生一个异常。一个C++程序可能会处理几种异常:SEH异常,这是由操作系统结构化异常处理系统产生的;CRT错误,这是由C语言库运行时——还有——信号(signals)产生的。每种类型的错误都需要安装一个异常处理函数,以便能在出错时拦截这个消息,并做一些错误恢复的处理。如果你的程序有好几个线程,那么事情或许会更复杂一些。有些异常处理机制是对整个程序有效的,而另一些则仅对当前线程有效,这种情况下,你必须为每个线程都安装异常处理。你程序中的每个模块(EXE或DLL)如果都连接了CRT库(无论是静态还是动态的),那么异常处理的方法就主要基于CRT的连接方式(?)。各种各样类型的错误,多线程下对异常的各种不同的捕获方法,还有基于CRT连接方式异常处理,这让你的程序捕获所有可能的异常变得困难且麻烦。这篇文章的目的就在于帮助你更好的了解异常机制,并在你的C++程序中更好更有效的利用它。这篇文章附带了一个小控制台程序ExceptionHandler作为例子,这一个例子能产生和捕获各种不同的异常,并且能生成一个崩溃时的Dump文件,通过这个文件你可以定位到出错的代码行。背景知识之前有一段时间,我想找到一种可以拦截程序异常的方法,好用在我的一个开源工程上,CrashRpt - A crash reporting library for Windows applications. CrashRpt库会捕获程序中出现的异常,并收集相关的错误信息(比如崩溃时的Dump文件、错误Log、出错时的屏幕截图等),并且还可以将这些错误报告发送到网络上(图1)。图1 - CrashRpt库的错误报告窗口及错误详细信息窗口你可能曾经遇到过Windows的错误报告窗口(图2)突然在屏幕上弹出的情况,CrashRpt库其实做的是同样的事情,只不过它会将错误报告发送到你的web服务器上,而不是像Winodws自身错误报告一样,会将错误报告发送到微软的服务器上。图2 – Windows错误报告(传说中的华生医生)窗口浏览了一下MSDN,上面说的SetUnhandledExceptionFilter()这个函数我用来捕获非法访问的异常。不过不久后我就发现程序中的一些错误还是捕获不到,我的CrashRpt窗口没有弹出,华生医生还是会出现。我继续在MDSN搜寻,发现CRT中提供了不少的函数可以用来处理CRT的异常。比如说这几个函数set_terminate(), _set_invalid_parameter_handler(), _set_purecall_handler()。然后我还发现有些CRT的异常处理函数仅对当前线程有效,而有些却对整个进程都有效。继续研究后,我发现开发人员想要有效的使用异常处理机制,必须了解许多细节方面的问题。关于异常的只言片语正如你已经知道的,一个异常或严重错误表明了程序已经无法正常执行,需要立即停止运行。比如,下面这些情况都会导致异常:程序访问了一块非法的内存地址(比如NULL指针)在无限递归中,栈溢出大块数据被写入一片小缓冲区C++类中的纯虚函数被调用内存无法分配(内存不足)向C++的系统函数中传入非法的参数C运行库遇到错误,需要停止程序运行有两种类型的异常:SEH异常(结构化异常处理)和标准C++异常。关于它们的原理与实现,你可以去看看Vishal Kochhar写的一篇优秀的文章,在里面有深入的描述:/KB/cpp/exceptionhandler.aspxHow a Compiler Implements Exception Handling 。结构化异常处理系统是由操作系统提供的(这意味着所有的Windows程序都能产生和处理SEH异常)。SEH异常最初是为C语言设计的,但在C++中也可以使用。SEH异常是通过__try{}__except(){}这样的结构来处理的。程序中的main()函数就被这样的结构包围着,所
您可能关注的文档
- c++的socket编程相关资料汇总.doc
- C++各大有名库的介绍——GUI.doc
- C++函数参考.doc
- C++课程设计(计算器)8891531.doc
- C++课程设计5136779.doc
- c++上机实习教材.doc
- C++实习报告.doc
- C++实验指导书07-08-1.docx
- C++中级培训教材4679510.doc
- C++综合题.doc
- 货币供应增速创新低:中国2024年二季度金融形势分析.docx
- 20220527 2021中国生态环境状况.docx
- 市级财政项目支出绩效目标申报表、成本指标设置路径和参考案例.docx
- 南京(龙潭港区)—南京(龙潭站)—上海(洋山港区)集装箱铁水联运线路.pdf
- 西藏自治区水利工程建设项目标准勘察设计、工程总承包电子招标文件示范文本2024.docx
- 湖北省公路工程施工分包负面清单、公路工程施工分包合同、报审表、施工劳务合作合同(示范文本).docx
- 水利水电工程安全监测仪器(传感器)静态特性、指标计算、环境量、变形、渗流、力、应力应变及温度监测仪器安装考证表.docx
- 连云港(连云港区)—中亚(塔什干)新亚欧集装箱铁水联运线路.pdf
- 轨道交通衔接设施规划设计内容要求、车站分类、贵阳市轨道交通衔接设施配置要求.pdf
- 西藏自治区水利工程建设项目标准项目管理总承包电子招标文件示范文本2024.docx
最近下载
- 2024-2025学年高中思想政治必修1 中国特色社会主义统编版(部编版)教学设计合集.docx
- 员工培训---病理.ppt
- 2025年上海市数学高考一轮复习精讲精练 第10讲空间向量与立体几何(11类核心考点精讲精练)含详解.docx
- 养老院活动记录表(新版).doc VIP
- 二年级上学期数学基础知识《填空题》专项练习及一套完整答案.docx
- 建设工程质量资料管理.ppt VIP
- 酒店智能弱电系统工程设计模板.doc VIP
- 烟草种植气象服务规范.pdf VIP
- 2023上海高三二模优秀作文汇编.doc
- 第5 2课《学习工匠事迹,领略工匠风采》(课件)-【中职专用】高二语文同步精品课件(高教版2023·职业模块).pptx VIP
文档评论(0)