当一个错误发生在一个功能,我想知道的事件顺序,导致了它,特别是当这一职能是从一个十几个不同的地方。是否有任何方式检索该电话的堆在维生素b6,或者做我必须做到这一困难的方式(例如,日志条目的每个功能和差错处理程序,等等)?

有帮助吗?

解决方案

我很确定你必须以艰难的方式去做。在我以前的工作中,我们使用DCOM组件对VB6进行了非常优雅的错误处理过程。但是,必须将大量冗余代码添加到每个方法中,以至于我们使用本土工具为您插入所有这些代码。

我无法提供太多关于其实施的见解(因为我已经忘记了大部分内容并且他们有可能将其视为商业秘密)。确实突出的一点是方法名称无法在运行时派生,因此它被添加为字符串变量(一些开发人员将复制粘贴而不是使用该工具,这将导致错误堆栈的谎言。 ..)。

HTH

其他提示

你必须以艰难的方式去做,但并不是所有的 很难......说真的,一旦你写了一次模板,它就是一个快速复制/粘贴/修改以将Err.Raise语句中的函数名称与实际函数名称匹配。

Private Function DoSomething(ByVal Arg as String)

    On Error GoTo Handler

    Dim ThisVar as String
    Dim ThatVar as Long

    ' Code here to implement DoSomething...

    Exit Function

Handler:
    Err.Raise Err.Number, , "MiscFunctions.DoSomething: " & Err.Description

End Function

当你有嵌套调用时,这会在每个例程命中其Handler并将其名称添加到错误描述时展开。在顶级功能中,您将获得“调用堆栈”功能。显示调用的例程列表,以及实际发生的错误的错误号和描述。它并不完美,因为你没有获得行号,但我发现你通常不需要它们来找到解决问题的方法。 (如果你真的想要行号,你可以把它们放在函数中,并使用Erl变量在Err.Raise语句中引用它们。没有行号,只返回0。)

另外,请注意,在函数本身中,您可以使用消息中有趣变量的值来引发自己的错误,如下所示:

Err.Raise PCLOADLETTER_ERRNUM, , "PC Load Letter error on Printer """ & PrinterName & """"

(语法高亮显示在预览中看起来很糟糕......我想知道发布后它会是什么样子?)

艰难的手动方式几乎是唯一的方法。如果你看看这个问题,有人会提出了一个名为MZTools的工具,它将为你做很多繁重的工作。

正如其他人所说(多年前,我看到......但是有很多人还在使用VB6!:)),我认为除非你使用某些第三方工具,否则无法以编程方式检索调用堆栈。

但是如果你需要为了调试目的而这样做,你可以考虑在被调用例程中添加一个Optional输入字符串变量,你是否会把调用者的名字。

Sub MyRoutine
    (...)  ' Your code here
    call DoSomething (Var1, Var2, Var3, "MyRoutine")
    '                                       ^
    '     Present routine's name -----------+

    (...)  ' Your code here

End Sub


Public DoSomething (DoVar1, DoVar2, DoVar3, Optional Caller as string = "[unknown]")
    Debug.Print " DoSomething Routine Called. Caller = " & Caller

    ... ' (your code here)

End Sub

也许并不那么优雅,但它对我有用。

此致 马克斯 - 意大利

坎普维尔(或者是它Numega时)DevStudio视觉基本的6个用来做到这一点。该方法是通过添加的添加instrumenation来每一个电话,被称为一个非常小段,加入代码堆。在任何错误,它甩了出,调用栈,然后有没有东西像邮件或张贴到网络服务器的所有调试的信息。添加和去除仪器是一个潜在的致命的工作(尤其是回来然后,当我们在此作为我们的源的控制),但是如果它的工作,它的工作。

作为 Darrel指出, 你可以添加的东西很像通过使用MZTools和设立一个模板。这是一个很大的工作,并可能是更effeort比的奖励将是但如果你已经非常难以追踪,错误,它可能会帮助)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top