荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Rage (Rage My Dream), 信区: Program
标  题: 掌握C++ Builder以代码为基础的调试方法(3)
发信站: 荔园晨风BBS站 (Wed May 23 13:41:36 2001), 转信

  这个机制还有更多的功能。如果你想处理异常,但是不想在处理的位置停止,
那么可以重新抛出异常。这时,程序将继续寻找下一个catch()语句来处理这个异
常。这个方法和“throw”差不多。这样,你处理过的异常会再次被抛出,继续寻
找下一个catch语句来处理它。

  最后一个要说的是__finally(这不是标准的用法,是Borland添加的一个好方
法),在__finally{}程序块中代码,无论是否发生异常都会被执行。这是一个清
理程序中使用new分配的本地变量,设置用作旗标的变量值为正常的好位置。(比
如,把一个等待状态的光标图标设置为正常光标。)

  就是这些了。有时间的话,请看看C++Builder帮助文件中的Exception类以及
继承Exception的类。这些将对于理解本节所说的内容有很大帮助。

  使用记录机制
  你不可能总是用调试器来调试代码,在某些情况下,可能无法使用内部集成的
调试器,这时候,你就不得不依靠其他手段调试程序了。(比如:Windows NT服务
程序,ISAPI/CGI程序,实时应用程序等等)。这时候,有经验的程序员可能会借助
古老的调试方法,例如,使用一些分类的记录机制来确定程序实际运行的过程。我
们很幸运,现在有一系列的方法可以简单的完成这样的工作。下面将介绍3种我最
喜欢的方法。



  第一个:OutputDebugString。(WinAPI: VOID
OutputDebugString(LPCTSTR lpOutputString);)很幸运,微软彻底的实现了调试
子系统。它包括的一些特点可能让你想把自己的记录系统扔掉。应用程序在调试器
进程中运行时OutputDebugString将用C字符串把调试器输出的信息打印出来。如果
程序没有在调试器进程中运行,它将忽略这些调用。它会很好的在客户的机器上运
行,不会弹出信息窗口。如果在发布给客户的时候,忘记去掉这些代码程序仅仅会
变慢一点,不会有别的不良后果。

  第二个方法:使用了GExperts,通过 dbugint.pas接口进行调试。它是个可以
称之为伟大的程序,你可以把它分发给客户。和OutputDebugString一样,如果客
户没有这个程序,它就根本什么也不作。(它会自动检测机器上是否安装了客户端
)。要使用dbugintf,它很容易被加入到你的工程中,加入#include "dbugintf.
HPp"(要把它加入工程,然后会编译它的pascal文件)。然后,你就可以直接使用
SendDebug(要送到记录文件的字符串); 或者,你需要它更机警一些,可以使用
SendDebugEx(它给TMsgDlgType增加了一个新的消息类型)SendMethodEnter,
SendMethodExit, SendSeparator等等(用法都差不多)。如果你打算给最终用户
分发客户端 (Gdebug.exe),不要忘记include所需要的程序包。GExperts可以在
http://www.gexperts.org 得到,它是免费的。

--

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.215]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店