>
通过添加EnterMethod和ExitMethod方法的调用,我们可以生成一个日志来记录方法何时被调用。
看过例子之后,我们就会发现CodeSite的功能是非常强大的,我们只要简单的在程序中添加几条语句就可以生成非常详细的信息,并通过CodeSite Viewer以生动的图表表现出来。接下来,我们再来谈谈CodeSite的高级应用技术。
发送消息到日志文件
每个程序或多或少都会有Bug,不在这时发生,也会在那时发生,短时间内不发生,很长时间就可能发作,有时反复出现,有时非常偶然的才能被发现。如果一个人告诉你他写的程序在任何时候都没有任何问题,他一定是在撒谎。正是由于Bug的偶然性和隐蔽性,就使得我们往往很难重复用户提交的Bug,这就给我们调试程序并找到问题的原因产生了极大的障碍,而CodeSite能够发送消息到日志文件的特性就使得用户报告Bug变得更容易,他们只要把运行时生成的信息文件提交就可以了。相应的我们调试程序的工作也会变得更轻松,我们可以使用CodeSite Viewer来直观的分析错误发生的原因和位置。
要想改变消息发送的目标,我们可以通过设定TCodeSite 对象的DestinationDetails属性来实现。这项功能要求客户的机器上必须安装了CodeSite Dispatcher,它属于CodeSite中可自由分发的部分。下面的要讲具体过程仍然是基于前面讲过的例子:
(1)在窗体的OnCreate事件中添加下面代码:
CodeSite.DestinationDetails := ''''File[Path=C:\FirstLog.csl]'''';
(2)编译并余兴程序,这回我们在点击按钮后,消息就不再被发送给CodeSite Viewer而是发送到C盘的FirstLog.csl文件中。
(3)使用CodeSite Viewer加载FirstLog.csl文件,这回我们就象先前一样察看被保存的CodeSite消息了。
(4)如果我们想把消息同时发送到CodeSite Viewer和日志文件的话,只修改前面的代码为:
CodeSite.DestinationDetails := ''''Viewer,File[Path=C:\FirstLog.csl]'''';
发送用户定制的数据
虽然TCodeSite 类提供了大量的处理不同数据类型的方法,但有时我们可能会需要发送某种自定义格式的数据信息。为此,TCodeSite 类定义了SendCustomData 方法,它支持发送任意的数据类型,并会根据一个自定义的格式器来格式化数据以便CodeSite Viewer可以正确的显示数据。
首先我们需要创建一个TCSFormatter 对象的子类,然后重载对象的FormatData,InspectorType和TypeName方法。然后调用CodeSite对象管理器对象CSObjectManager的来注册新的TCSFormatter子类。此外,我们还需要调用RegisterCustomFormat方法来注册一个新的消息类型。
下面是一个实际应用的例子,单元CSEmployee.pas中实现了一个TCSEmployeeRecord记录类型的定制格式器:
unit CSEmployee;
interface
uses
Windows, Graphics, CSIntf;
const
csmEmployeeSummary = csmUser + 1;
csmEmployeeDetails = csmUser + 2;
首先在Uses部分添加对CSIntf 单元的引用。第二步是为每一个格式器定义新的CodeSite消息类型常数,上面我们定义了两个常数,注意常数应该大于csmUser,但不能大过32,000。
type
TCSEmployee = record
LastName: string;
FirstName: string;
Address: string;
City: string;
State: string;
ZipCode: string;
PhoneNumber: string;
HireDate: TDateTime;
Salary: Currency;
VacationDays: Integer;
SickDays: Integer;
Manager: Boolean;
end;
上面的记录就是我们要发送的自定义的数据类型。
TCSEmployeeSummaryFormatter = class( TCSFormatter )
public
function InspectorType: TCSInspectorType; override;
procedure FormatData( var Data ); override;
function TypeName: string; override;
end;
TCSEmployeeDetailsFormatter = class( TCSFormatter )
public
function InspectorType: TCSInspectorType; override;
procedure FormatData( var Data ); override;
function TypeName: string; override;
end;
上面是两个定制的格式器类的定义。第一个格式器将把TCSEmployee 记录格式化为一个文本格式,第二个格式化器将把TCSEmployee 记录格式化为网格样式。
implementation
uses
SysUtils;
{=========================================}
{== TCSEmployeeSummaryFormatter Methods ==}
{=========================================}
function TCSEmployeeSummaryFormatter.InspectorType: TCSInspectorType;
上一页 [1] [2] [3] [4] 下一页 [ORACLE]Oracle PL/SQL Profiler应用指南
|