快速业务通道

掌握C++ builder的除错艺术(1)

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
将注意终端是否已经安装在机器上)。要使用dbugint.pas的话很容易,将它加入你的工程并加上 #include "dbugintf.hpp"(因为是pascal文件,你必须将它加入你的工程以便c++builder编译器生成hpp头文件。)然后你只需使用senddebug(“要送到记录中的字串”);或者你也许想更灵活些,还有senddebugex-增加一个消息类型参数来调用tmsgdlgtype(详细说明参考vcl在线帮助),sendmethodenter, sendmethodexit, and sendseparator 等等(十分自解释的名字)。只是别忘记加入必须的package包,若你打算将此终端(gdebug.exe)其给你的一些最终用户的话。gexpert可以从http://www.gexperts.org/ 获得并且是免费的。

第三种我要指出的是,这也许是最难的选择-实现你自己的记录控制台。可没有你想的那么简单!你也许首先会想到“扔个richedit控件在form上,将它设为只读的,然后开始记录,对吗?” 错!理论上挺好,但实践呢,使用richedit控件来记录将降低程序的运行速度、使内存破碎,丢失、通常会在10分钟内使整个机器慢下来!!(要说明白为什么得花上点时间才行,但我向你可以保证)。所以你所需要的是计划好你的记录机制的需要,并开始计划一个定制控件若你想要个彩色的图标的话。还有一个选择,需要做点工作,但可是非常有效。就是使用一个listbox控制来记录,并将style属性设为lbownerdrawfixed,这样句柄将会自绘。(这也是gexperts和它的gdebug console所做的)。要做许多工作,但哈哈,如果你想做…

结合使用记录机制与类的异常处理机制

现在进入下一步:)(跟你打赌你从未意识到设置一个优秀的调试/除错系统需要做如此多的工作!)你不用总是预料各种偶然的异常会发生什么,而且绝大多数时候当程序经过大量的除虫测试(尽量攻击程序,试图让它崩溃)后,你根本不用担心这些。下面这个技术,我建议任何组件开发者第一次在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啦。

okay,是时候回顾一下了。classname()方法是如何帮助我们的?不想每次都只得到一个“exception“串就完了吧?难道是因为将e声明为一个异常?不对。这是vcl比较酷的部分,任何从tobject继承来的类能够自动知道其自身的类型、其基类的类型、等等许多有趣的信息,你可以察看tobject的帮助。所以尽管我们使用的是exception &e,e.classname()将会找出我们得到的异常的实际的类名(译者注:c++的多态性)。这些好处的代价就是可执行文件的体积更大了,几乎所有的c++builder/delphi程序员都会发现这一点。(no pain, no gain)没有痛苦,就没有收获.他们说….

xiphias增加了tstringlist的addingline方法,savetofile方法是另一种记录(logging)的有效形式。最后应该保证你的应用程序总是写记录文件(logfile),或这每次捕捉到异常时重写记录文件。

处理您代码外产生的异常

现在的步骤是我们开始学习基于ide的除错器之前的最后一个基于代码的步骤。但也许在有严重错误发生时,对装饰应用程序来说这是最重要的步骤。举例来说,这是显示一个包含错误详细内容的对话框理想的时机。这时弹出在屏幕上的对话框可以方便最

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号