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

idfiyjo8  于 2022-10-16  发布在  其他
关注(0)|答案(6)|浏览(174)

我经常会调用一个函数Foo,想知道这个函数可能抛出什么异常。为了找出答案,我随后研究了Foo的实现,但这还不够。Foo可能确实会调用引发异常的函数Bar
有时,我甚至怀念Java的检查异常处理。
因此,对我来说,有必要记录每个函数可能引发的异常:问题是:如何抛出?关于如何记录异常情况,是否有任何最佳实践?你是如何处理这个问题的?

slsn1g29

slsn1g292#

大多数Delphi应用程序都是VCL应用程序。它们不需要检查异常,因为主消息循环有一个捕获所有内容的try/Except块。
不过,最好记录哪些异常可以由您的代码显式引发。
为此,我会使用XMLDoc(XMLDoc上有variousquestions,so上有here is some documentation from Embarcadero)。
但是,请注意,基础代码也可能引发异常。根据您对图书馆的影响,您可以或不能保证它们总是相同的。不同的是操作系统:根据运行位置的不同,您可能会得到不同的异常。
--耶伦

9ceoxa92

9ceoxa923#

我们在文档中使用了Javadoc风格的注解。我们提取信息并使用一些简单的文本脚本生成输出。我们也使用了DelphiCodeToDoc。
为了记录异常,我们强制使用@throws标记。

bmp9r5qi

bmp9r5qi4#

这对于从DevJet.net记录代码-Documentation Insight来说看起来很棒

f0brbegy

f0brbegy5#

我使用XMLDoc注解。它基本上是在接口部分的代码中添加一种特殊类型的注解,就在属性或方法声明的上方。这里有一个荒谬的(当然)例子。如果您在代码中添加类似的样式注解,当您在编写代码时调用它时,它们将在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}
    constructor 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}的行

idv4meu8

idv4meu86#

我使用PasDoc来记录我几乎所有的Delphi项目。它包括一个“加薪”标签,可以满足您的要求。
问候-都灵

相关问题