当前位置:  开发笔记 > 编程语言 > 正文

是否可以在VB6中以编程方式检索调用堆栈?

如何解决《是否可以在VB6中以编程方式检索调用堆栈?》经验,为你挑选了2个好方法。

当函数中发生错误时,我想知道导致它的事件序列,特别是当从十几个不同的地方调用该函数时.有没有办法在VB6中检索调用堆栈,或者我必须以艰难的方式执行它(例如,每个函数和错误处理程序中的日志条目等)?



1> JeffK..:

你必须做硬盘的方式,但它是不是真的辛苦......严重的是,一旦你写的模板一次,这是一个快速复制/粘贴/修改函数名在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 & """"

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



2> Austin Salon..:

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

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

HTH

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有