如何在Delphi中记录引发的异常?

时间:2011-01-28 14:25:48

标签: delphi exception-handling documentation

我经常遇到一个函数Foo,想知道这个函数可能会抛出什么异常。为了找出我,然后研究Foo的实现,但这还不够。 Foo可能确实会调用引发异常的函数Bar

有时我甚至会错过Java检查过的异常处理。

因此,我很有必要记录每个函数可以抛出的异常:问题是:如何?有关如何记录异常的最佳实践吗?你是如何处理这个问题的?

6 个答案:

答案 0 :(得分:3)

我认为这涵盖了你意识到的问题的某些部分

Cleaner, more elegant and wrong

Cleaner, more elegant and harder to recognize

答案 1 :(得分:1)

我们对文档使用Javadoc样式注释。我们提取信息并使用一些简单的文本脚本生成输出。我们也使用了DelphiCodeToDoc。

记录异常,我们已经强制要求使用@throws标记。

答案 2 :(得分:1)

大多数Delphi应用程序都是VCL应用程序。它们不需要检查异常,因为主消息循环有一个try / except块捕获所有内容。

优良作法是记录您的代码可以明确提出哪些异常。

我会使用XMLDoc(在XML上有various questions,在SO上有here is some documentation from Embarcadero}。

但请注意,底层代码也可能引发异常。根据您对图书馆的影响,您可以或不能保证它们始终相同。另一件事是操作系统:根据您的运行地点,您可以获得不同的例外情况。

- 的Jeroen

答案 3 :(得分:1)

这非常适合记录代码 - 来自DevJet.net的Documentation Insight

答案 4 :(得分:0)

我使用XMLDoc注释(参见链接和讨论here。它基本上是在接口部分的代码中添加一种特殊类型的注释,就在属性或方法声明之上。这是一个荒谬的(当然)示例如果在代码中添加类似的样式注释,则在编写代码时,它们会在Code Insight中弹出,就像VCL的文档一样。

type
  {$REGION 'TMyClass description'}
  /// <summary>TMyClass is a descendent of TComponent 
  /// which performs some function.</summary>
  {$ENDREGION}
  TMyClass=class(TComponent)
  private
    // your private stuff
    FSomeProp: Boolean;
    procedure SetSomeProp(Value: Boolean);
  protected
    // your protected stuff
  public
    {$REGION 'TMyClass constructor'}
    /// <summary> TMyClass constructor.</summary>
    /// <remarks>Creates an instance of TMyClass.</remarks>
    /// <param>Owner: TObject. The owner of the instance of TMyClass</param>
    /// <exception>Raises EMyObjectFailedAlloc if the constructor dies
    /// </exception>
    {$ENDREGION}
    Create(Owner: TObject); override;
  published
    {$REGION 'TMyClass.Someprop'}
    /// <summary>Someprop property</summary>
    /// <remarks>Someprop is a Boolean property. When True, the
    /// thingamajig automatically frobs the widget. Changing this
    /// property also affects the behavior of SomeOtherProp.</remarks>
    {$ENDREGION}
  property Someprop: Boolean read FSomeProp write SetSomeProp;
  end;

我更喜欢在区域中包装这些XMLDoc注释,因此除非我想编辑它们,否则它们可以折叠。我已经这样做了;如果您不喜欢它们,请删除{$ REGION}和{$ ENDREGION}

的行

答案 5 :(得分:0)

我使用PasDoc来记录几乎所有的Delphi项目。它包含一个“加注”标签,可以满足您的要求。

此致 - 都灵