- 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文档。上传文档
查看更多
EffectiveExceptionHandlinginVisualC译.
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写的一篇优秀的文章,在里面有深入的描述:How a Compiler Implements Exception Handling。结构化异常处理系统是由操作系统提供的(这意味着所有的Windows程序都能产生和处理SEH异常)。SEH异常最初是为C语言设计的,但在C++中也可以使用。SEH异常是通过__try{}__except(){}这样的结构来处理的。程序中的main()函数就被这样的结构包围着,所以所有没有被处理的SEH异常默认都会被捕获,华生医生会弹出来。SE
您可能关注的文档
- ECE和EEC(EC)汽车技术法规介绍..doc
- ECCO变形概念电动汽车..doc
- ECE和EEC(EC)汽车技术法规介绍..doc
- ECHIGHTEMPERATURELOGGERTC..doc
- EC2000伺服驱动器接线图与选型..doc
- ECD(GC2010和GC2014通用操作方法)..doc
- Eclipse+ADT中android程序签名打包导出详解..doc
- Eclipseoffice练习5用ECLIPSEOFFICE和SIMOPT进行历史拟合..doc
- eclipse+GNU建立STM32开发环境..doc
- eclipse+webservice..docx
- 2025年中国锻铁围栏市场调查研究报告.docx
- 2025年中国椭圆型市场调查研究报告.docx
- 2025年中国无蔗糖原味豆浆市场调查研究报告.docx
- 2025-2031年中国泛在电力物联网行业发展运行现状及投资潜力预测报告.docx
- 2025年中国制袋机零件市场调查研究报告.docx
- 2025年中国智能除垢型电子水处理仪市场调查研究报告.docx
- 2025-2031年中国甘肃省乡村旅游行业市场深度研究及投资策略研究报告.docx
- 2025-2031年中国干海产品行业市场发展监测及投资战略规划报告.docx
- 2025年中国全铝图解易拉盖市场调查研究报告.docx
- 2025年中国人造毛皮服装市场调查研究报告.docx
最近下载
- 形势与政策题库共享 含答案.pdf VIP
- 最新人教版九年级数学下册 全册教学课件全集(858张).ppt VIP
- 生成式AI在小学英语课堂个性化学习路径规划中的应用与实践教学研究课题报告.docx
- 2025邯郸冀南新区党群系统事业单位招聘40人笔试备考题库及答案解析.docx VIP
- 特殊检查健康宣教ppt课件.pptx
- 《医院感染监测标准》WS312-2023版课件.pdf VIP
- SY_T 6659-2016用科里奥利质量流量计测量天然气流量.pdf
- KET词汇表(英文中文完整版).docx VIP
- 大气物理学题库.pdf VIP
- 2025年黑龙江省大庆市萨尔图区铁人街道招聘社区工作者考前自测高频考点模拟试题含答案解析.docx VIP
文档评论(0)