中华网通行证
用户名 密码
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  

掌握C++ Builder以代码为基础的调试方法(4)
霍炬编译 2001-04-27 13:43:36

  

  第三个,大概是最艰苦的方法,就是使用你自己的记录控制。这个方法可能不是你想象的这么简单。你可能首先会想到“在窗体上扔一个RichEdit,把它设置为只读的,然后往里面写记录”是这样吧?理论上不错,但是,实施起来...首先,使用RichEdit控件来做记录,会大大降低应用程序的速度,还会在内存中造成碎片,甚至丢失内存。通常,在运行10分钟左右之后,会使整个计算机的速度变慢!(这样做简直是在犯罪!)所以,如果你希望在自己的记录中能够使用彩色和图标,那么最好自己创建一个组件。如果没有这么高的要求,那么有一个简单有效的方法,就是使用ListBox控件作记录,把ListBox的Style属性设置为lbOwnerDrawFixed,这样句柄将会自绘。(GExperts的控制台就是用这样的方法制作的)。

  将记录和异常处理结合使用
  你不用总是担心可能会发生什么偶然的异常。一般来说,通过很多的bugs测试后(尽量折磨程序,看看它会不会崩溃),应用程序在运行是应该不会出现什么错误。下面的这个技术,建议组件开发者,在第一次把组件放在IDE环境测试的时候,很应该遵守。一个在IDE中产生的异常会导致很多问题,甚至可能无法重新启动IDE也不能恢复。这个技术很简单。在代码中每一个函数或是主要的函数中加入:

  try

  {

   //函数的代码

  }

  catch(Exception &E)

  {

  SendDebugMessage(“Exception caught in classname::functionname of type:” +E.ClassName()

  +” with the message:”+E.Message);

  };

  (把字符串中classname 和 functionname 替换成相应的类名和函数名。在出现错误时,你会立刻知道错误发生的位置。这样也就不至于强制重起IDE的了。

  现在,让我们看看前面的内容, ClassName()给了我们什么样的帮助呢?它只是用于返回字符串“Exception”吗?每一次,E都被声明为异常类型?这是VCL另一个优秀的地方,所有的类都从TObject继承,所以,这些类都能自动获得正确的类型和基类的类型,所有的更多的信息都可以在这里找到。(请参见TObject的帮助)所以,尽管我们使用了Exception &E,其中的E.ClassName()将返回捕获到的产生异常的实际类名。得到这些好处需要付出的代价是编译出来的可执行文件变大了一些。所有的Delphi/CBuilder用户都注意到了这一点,但是他们说,没有付出就没有收获。在http://www.bytamin-c.com/的howto栏目可以看到Xiphias的一系列文章。其中,他提到了使用TStringList作记录的方法:先将错误通过TStringList的Add方法加入到StringList里面,然后使用SaveToFile保存到硬盘上。不过要注意在程序结束的时候不要忘记使用SaveToFile()方法把TStringList保存起来。或者,也可以每次捕捉到异常之后都保存一次。


  在代码外部进行异常处理
  这是使用代码处理异常的最后一节,以后,我们将使用IDE的调试工具。但是,这节中讲到的方法在处理致命错误时是很重要的。比如说:可以显示一个包含了错误信息的对话框,这样,用户报告bugs的时候会清除的多。你肯定不想听到用户报告说:“啊,这有个对话框,上面写着什么地址发生了错误”。有个好办法能改善这种状况,请往下面看。

  第一步:在主窗体(工程设置里面,自动创建的第一个窗体)中创建这样一个函数:

  void __fastcall AppLevelExceptionHandler(TObject *Sender, Exception *E)

  {

  }

  然后,在里面加上显是错误(E->Message)的代码,错误类型(记住前面提到过的E.ClassName())以及其他需要的细节信息。

  第二步:把它与系统挂钩。很简单,只需要在窗体的OnCreate事件中加入这行:

  Application->OnException=AppLevelExceptionHandler;

  在这行代码上,不要吝啬,因为加上它,基本上就可以说所有的错误都不会漏掉了。无论在任何地方发生的错误都可以被捕捉到。

  现在,所有以代码为基础的调试方法你都学会了,马上把他们加入到你的工程里去吧。最好能把它们变为你的习惯。这将对你的程序有很大帮助。

|首 页||上一页|

赛迪网



相关报道
 
更多本栏目内容
??Windows 2000系统安全设置攻略
??Dreamweaver编写CSS需要掌握的技巧
??使用Flash MX过程中的3个小技巧
??拖IE9网站图标到Win7任务栏 精彩好礼任你拿
??从此不再耗流量?Google离线地图试用
??给瑞星添加移动存储自动杀毒功能
??一周壁纸榜单 靓丽风景伴您欢度周末
??金山网络七款软件齐升级 炫丽界面贺新春
??提升网站流量和权重 百度热榜排第一
预警:电商促销引钓鱼 七夕网购需谨慎

本站检索



中华网推荐

·国家级治脑病新药思维源
·中藏药治疗脑病新突破
·治类风湿,强直性脊柱炎
·养肾·痛风·长寿
·肝病泌尿脑萎缩新药介绍
·强直性脊柱炎康复乐园
·让中医辩证不孕不育
·国医治股骨头坏死一绝
·乙肝为何久治不愈?
·二千元垄断批发做老板
·中医中药专治前列腺
·治牛皮癣白癜风已成现实
·专治痛风病的白衣天使
·不孕不育的杏林奇葩
·专卖店零售管理系统





   

网络教室编辑信箱