CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请教:怎样捕获所有异常?!

楼主Ah(蓝过天)2003-09-03 08:45:42 在 VC/MFC / 基础类 提问

我用的  
   
  try{}  
  catch(CException   e){}  
   
  可是有些异常还是捕捉不到  
  问题点数:100、回复次数:14Top

1 楼smch(Ashes Of Time)回复于 2003-09-03 08:58:45 得分 25

catch(...)Top

2 楼Ah(蓝过天)回复于 2003-09-03 09:29:36 得分 0

可是catch(...)并不能知道是什么引起了异常Top

3 楼sunheroshang(简单.剑胆)回复于 2003-09-03 09:42:40 得分 5

upTop

4 楼he_zhidan(何志丹:www.dzlishi.net,www.vcshare.net)回复于 2003-09-03 09:46:29 得分 5

异常内容放在e内Top

5 楼yl0002(yl)回复于 2003-09-03 09:54:31 得分 0

catch(...)好像这个捕不到:  
  try{  
  int   f;  
  free(&f);  
  }  
  catch(...)  
  {  
  }Top

6 楼tonybaobao(Tony宝宝)回复于 2003-09-03 09:55:42 得分 5

catch(...)是捕获所有异常,不过你要放在所有catch()段的最后,否则前面的catch()段都会无效。Top

7 楼SoLike(思危)回复于 2003-09-03 09:55:58 得分 20

C++的异常什么都可以往出抛,用这种方法确实不能获取其详细信息。  
   
  但通常抛出异常的函数或库都有抛出异常的说明,这样你就可以有目的的捕获Top

8 楼whoishere(我来也)回复于 2003-09-03 09:58:23 得分 5

还可以是  
  TRY  
  {}  
  CATCH_ALL(   e   )  
  {  
            //   这里可以从e中获取各种错误信息,例如  
            char   szErrInfo[100];  
            e->GetErrorMessage(   szErrInfo   ,   100   );  
  }  
  END_CATCH_ALLTop

9 楼xiaohedou(小河豆(充电中.18%.))回复于 2003-09-03 11:10:45 得分 5

介绍一本书书<windows核心编程>  
   
   
  第25章       未处理异常和C++异常 598  
  25.1       即时调试 600  
  25.2       关闭异常消息框 601  
  25.2.1       强制进程终止运行 601  
  25.2.2       包装一个线程函数 601  
  25.2.3       包装所有的线程函数 601  
  25.2.4       自动调用调试程序 602  
  25.3     程序员自己调用UnhandledException  
                Filter 602  
  25.4       UnhandledExceptionFilter函数的一些  
                细节 603  
  25.5         异常与调试程序 604  
  25.6       C++异常与结构性异常的对比 618Top

10 楼yl0002(yl)回复于 2003-09-03 14:14:30 得分 10

to   SoLike(是我):  
  有目的的捕获,就不是楼主说的,捕获所有异常了吧!  
  to   whoishere(我来也)   :  
  你哪个是mfc的宏,在sdk中就玩完了。  
  to   Ah:  
  不知你在什么平台下,捕获所有异常,要求不要求得到异常码,与异常信息!(这方面,我知道一点,前一段刚研究过一下)Top

11 楼SoLike(思危)回复于 2003-09-03 18:32:50 得分 5

还请楼上的多多指教Top

12 楼ayanamiwww(咩~咩『抵制日货』)回复于 2003-09-04 00:34:41 得分 5

http://expert.csdn.net/Expert/topic/2073/2073809.xml?temp=.2880213Top

13 楼smch(Ashes Of Time)回复于 2003-09-04 22:52:16 得分 5

catch   (   _com_error   &e   )  
  {  
  _bstr_t   bstrSource   (e.Source());  
  _bstr_t   bstrDescription   (e.Description());  
  CString   strError;  
  strError.Format("无法连接Sybase数据库。\r\n错误代码是:%08lx\r\n错误的原因是:%s\r\n错误源是:%s\r\n错误的描述是:%s\r\n",   e.Error   (),   e.ErrorMessage   (),   (LPCTSTR)   bstrSource,   (LPCTSTR)   bstrDescription);  
  MessageBox   (strError,   bstrDescription,MB_OK);  
  return   false;  
  }  
  catch(CException   &e)  
  {  
  e.ReportError();  
  e.Delete();  
  return   false;  
  }  
  catch   (...)  
  {  
  TRACE   (   "***   无法解决的错误   ***"   );  
  return   false;  
  }  
   
  这样应该可以,由于CException是其它几种异常的父类,它的派生类引起的异常也可以捕捉到。  
  不过最好还是根据你的代码判断会引起哪一类异常。Top

14 楼yl0002(yl)回复于 2003-09-05 09:26:58 得分 5

这方面起也了解不多。(做好的,见过一些人,不光把所有异常捕获,而且还将异常出现的行号与所在文件打出来。这时想,还是java与c井好)  
  在mfc:捕获异常方法很多,异常信息也很多。不用多说了。  
  stl的异常:用exception(及其子类)  
  其它异常,有其它异常对应的异常类(如上面老兄说到的com异常)  
  win32sdk平台下用c++,异常最好用结构化异常。  
  c++异常用try   catch关键字。但这是c++异常。要捕获除法溢出等这样的异常,用结构化异常。用结构化异常(seh)语句(cih就用到了seh,这是os提供的)  
  __try   compound-statement  
  __except   (   expression   )   compound-statement  
  注意要求在nt   os以上,并不可以有析构函数的c++类对象。  
  还有一种方法,将c++异常转化为seh结构异常。使用_set_se_translator函数。  
  framework中获取到异常码,但没有异常信息。  
  以上是我的愚见,请大家不要见笑!Top

15 楼yl0002(yl)回复于 2003-09-05 09:38:09 得分 0

异常这方面我了解不多。说一下我的认识。(做好的,可以将异常出现的文件与行号打出来,java与c井本身提供此功能)  
  c++异常关键字:try   catch  
  mfc上可以用TRY   CATCHALL宏,或是CException类。  
  stl用exception及其子类。  
  其它异常有其它异常所对应的异常类(上面老兄提到的com异常)  
  framework   win32下用c++时,想捕获除法溢出这样的c异常,最好用结构化异常seh(cih就用到过它,这是os提供的),  
  结构化异常关键字:  
  __try   compound-statement  
  __except   (   expression   )   compound-statement  
  注意seh要求nt   os以上,不能有析构函数的c++类对象。  
  还有一种办法:将结构化异常转化为c++异常,用_set_se_translator函数。  
  在这里c异常,只能提供异常码,不能提供异常信息。  
  以上是我的愚见,不对的,还请大侠指点!Top

相关问题

  • 怎样捕获异常?
  • tclientsocket 的异常怎样捕获?
  • 异常捕获
  • 怎样捕获异常?急,解决即给分
  • 请问怎样捕获VB的异常错误信息?
  • 怎样让c++builder不捕获我已经catch的异常?
  • 有关异常的捕获!
  • 异常捕获的问题
  • 难道没人知道怎样捕获这个数据访问异常吗?--再加10分。
  • 怎样捕获ASP中的异常,然后返回页面一个错误信息。

关键词

  • c++
  • win32
  • 函数
  • 结构
  • os
  • 信息
  • 异常
  • 捕获
  • cexception
  • seh

得分解答快速导航

  • 帖主:Ah
  • smch
  • sunheroshang
  • he_zhidan
  • tonybaobao
  • SoLike
  • whoishere
  • xiaohedou
  • yl0002
  • SoLike
  • ayanamiwww
  • smch
  • yl0002

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo