一级棒(Eachfun)
一级棒 - 读书笔记 - C++ Primer - try、catch和assert
RSS订阅
try、catch和assert
发表时间:2006-07-23 01:00:26 关键词:C++,MFC,VC,Primer,编程,教程,读书

  程序员是要慢慢成长的,比如错误处理这种事情,就不是一开始就面对的。当我们编的程序还很小,小到“cin>>i; cout<<i;”这样的程度,错误处理不是我们要学习的目标。但是,一旦开始编写实用的程序,那么,无论考虑多么周到,无论代码多么精良。意外总是难免的。这些意外可能来自程序员的设计不到位、可能来自用户的错误操作、还可能来自机器与网络的不确定因素。
  没有什么比追踪错误更难过的事了,记得有一回我在追踪一个VB程序的错误。经过长时间测试,我发现程序在运行中突然发生很大的跳跃:函数A调用B,B调用C,在C的执行过程中,居然会突然跳到A中。后来追查发现,原来A中有一行“On Error Goto”语句。这一个语句,影响了我调试C函数。从那以后,我明白了,除非程序要发布了,否则别启动错误处理。
  C++与VB不一样,VB用一句“On Error Goto”启动了错误处理后,在该函数结束之前一直有效(除非显式地关闭它)。如果发生了异常,处理代码要根据异常的值来分析异常的类型。而C++可以选择可能出现异常的内容放进try后的块中。一个函数内部可以有多个try块,而每个try块又可以附带多个catch来处理。应该说,C++中的异常处理更灵活,当然也更容易出错。我前阵子发生的错误就是在ADO处理后只有“catch(_com_error *e)”,但是实际上出现的异常却不是“_com_error”类的,结果仍然抓不往异常。
  异常处理和assert之间的关系有些让人难以捉摸。一方面它们各有各的作用,另一方面它们有时会互相影响。我就曾经在这上面吃过亏:我的程序是在服务器上运行的,从来没人会盯着服务器看,所以我的程序不允许弹出对话框。我写了比较完善的异常处理,无论出现什么错误,都记录进LOG文件,然后继续运行。但是我却是用DEBUG模式编译的,结果异常到来时,try没起作用,倒是assert起作用了,弹了个对话框在那儿。这件事给我的启发是:别以为自己是程序的客户就可以用DEBUG模式编译。

本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
相关评论
  • 错误捕捉是很烦人,我的感觉是能在try代码段外解决的错误,就尽量在外头自己解决,尽量少依靠try来处理捕获错误.
    在网络编程中,有些错误是无法预知的,比如网络连接断了,数据库当了...好象在这些情况下,用try比较好.
    我有一次写的一个服务程序,用户用了一段时间后,经常会异常中止,查来查去查不出原因,后来才发现是ORACLE的日志满了,这个错误显然我在写程序的时候没有想过,丢脸啊...
    作者:walkman 时间:2006-07-24 10:13:13
1
发表评论
称呼:
QQ:
邮箱:
链接:
内容:
搜索: 百度搜索 Google搜索
Copyright©2000 - 2008 Eachfun.Com, All Rights Reserved 一级棒网络
苏ICP备05080156号
一级棒建站系统 http://www.eachfun.com 一级棒版权所有,未经许可不得商用!