返回首页

在Visual C有效的异常处理:介绍
本文介绍在Visual C程序在Windows上运行的异常和错误处理的标准技术。
异常(或一个严重的错误,或崩溃)通常意味着你的程序停止正常工作,需要停止执行的。例如,可能会出现异常,因为你的程序访问无效的内存地址(如NULL指针),内存缓冲区不能分配(内存),C运行时库(CRT)的检测错误,并请求程序终止,等等。
交流计划可处理多种类型的例外情况:通过操作系统的结构化异常处理机制的SEH异常,CRT的错误产生的C运行时库,并最终信号。需要安装一个异常处理函数,将每个错误类型拦截例外,并做一些错误恢复操作。
如果你的应用程序有多个执行线程,事情可能更为复杂。一些异常处理工作的全过程,但有些工作只为当前线程。所以,你必须安装在每个线程的异常处理。
您的应用程序中的每个模块(EXE或DLL)链接到CRT库(静态或动态)。异常处理技术在很大程度上取决于CRT联动型。
各种错误类型,在多线程程序的例外处理的差异和异常处理的依赖,对CRT联动要求大量的工作,完全处理所有您的应用程序来处理异常。本文旨在帮助您更好地了解异常处理机制和有效地使用在您的C应用程序的异常处理。
一个小控制台演示应用ExceptionHandler的文章。演示可以提高捕捉不同类型的异常并生成一个崩溃转储文件,可以看到在发生异常的代码行。背景
一段时间前,我需要为我的开源项目,CrashRpt拦截例外的方式 - 一个崩溃报告Windows应用程序库。 CrashRpt库处理的例外发生在你的应用程序,收集技术信息错误(如崩溃转储,错误日志,桌面截图),为用户提供了发送错误报告,在互联网上(图1)。 图1 - 错误报告的窗口和错误报告的详细信息的CrashRpt库的对话

回答

评论会员:游客 时间:2012/02/03
圣诞节来临,为了感谢大家,特点,款式新颖,品种多,价格低,质量好,低​​售价。谢谢大家====(http://www.fullmalls.com)=========(http://www.fullmalls.com)=====真正的宗教牛仔裤$33,EdHardy的牛仔裤,LV的,COOGI牛仔裤,痛苦牛仔裤$30的乔丹鞋,SHOX鞋,GUCCI,LV鞋50%的折扣秋冬时装:跨坐,T恤,帽子,球衣,手提包,名牌手表!EdHardy的$15,LV,GUCCI比基尼$15马球,Ed​​Hardy的,古奇,LV的,鳄鱼T恤教练25元,GUCCI,LV,普拉达,香奈儿手袋,多汁,$10古奇,EdHardy的太阳镜9元的新时代的上限。给你意想不到的收获====(http://www.fullmalls.com)=========(http://www.fullmalls.com)=========(http://www.fullmalls.com)=========(http://www.fullmalls.com)=========(http://www.fullmalls.com)=========(http://www.fullmalls.com)=====
| kamaliang:这是很大的,感谢{S0的}
评论会员:塞巴斯蒂安卢西尔 时间:2012/02/03
你好,{BR }
好文章,我发现它真的有用的信息!

我不明白的一件事是,GetExceptionPointers()函数您添加。在一个正常的SEH异常过滤器,的GetExceptionInformation()调用将返回充满在崩溃发生的确切时间,详细说明不同的寄存器值的信息结构。

另一方面,您GetExceptionPointers()函数将获得从那里被称为寄存器的值,因此它包含不相关的信息,真的不能被用来推断飞机失事的原因。例如,
void CCrashHandler::GetExceptionPointers(...)

{

    ...

    ContextRecord.Eip = (ULONG)_ReturnAddress();

    ...

}

在这种情况下,_ReturnAddress()将指向,里面GenerateErrorReport()...

或者,也许我失去了一些东西?

感谢:
| zexspectrum
评论会员:游客 时间:2012/02/03
你是对的-它会指出,里面GenerateErrorReport(),但上层栈帧将指向NBSP崩溃的真正到位;GetExceptionPointers()是一个解决方法在某些情况下使用,例如,在一个信号处理程序,或在CRT的错误处理程序,这是因为检索异常的处理程序的指针,没有标准的方式
马克ochsenmeier
评论会员:游客 时间:2012/02/03
优秀,这很好的概述。
maximka_rus
评论会员:我知道 时间:2012/02/03
magicpapacy:我总是用它

| hfrmobile:干得好
评论会员:CIDev 时间:2012/02/03
尼斯!
共享
感谢
评论会员:Rhuros 时间:2012/02/03
。一个明确的书面和翔实的文章
只是因为代码的工作,但这并不意味着它是良好的代码
评论会员:游客 时间:2012/02/03
|QuiOui:尼斯工作
| zexspectrum:。我想你的意思是链接到{A}
评论会员:游客 时间:2012/02/03
戈登品牌化:我固定的。不知道怎么发生的......!非常感谢
xComaWhitex
评论会员:游客 时间:2012/02/03
!正如其他人所说,很深入研究-漂亮的细节量太大
zexspectrum:什么是整点的使用_尝试,而不是只是简单的尝试。这可以防止跨平台的编程,并限制到一个特定的操作系统的代码(在这种情况下的Windows)
评论会员:迈克・迪亚克 时间:2012/02/03
使用_尝试使用_set_se_translator()或/ EHA尝试用替代。你可以使用你想哪一个
评论会员:布雷特Rowbotham 时间:2012/02/03
几乎所有的东西在上面的文章中概述的是特定于Windows。 __尝试使用不是在大局观,你必须使用微软的各种扩展(SEH的等),以得到最好的调试Windows应用程序的问题,所以是无关紧要的可移植性(sadly!)