如何在VB6中打印错误行

时间:2017-05-16 18:52:14

标签: vb6

我正在寻找一种在启动错误处理程序时打印错误行的方法。 是否存在某种方法来获取错误行和函数名称以进行打印?

2 个答案:

答案 0 :(得分:2)

您可以使用错误处理程序:

Public Function DoSomething() As Boolean
    On Error GoTo ERR_HANDLER

    ' your code

    DoSomething = True
    Exit Function

ERR_HANDLER:
    MsgBox Err.Description & vbCrLf & "on DoSomething procedure"
    If App.LogMode = 0 Then ' execute for IDE-DEBUG only (*)
        Stop
        Resume
    Else  ' App.LogMode = 1
       ' write error into a LOG file (optional)
    End If
End Function

(*)这允许打破错误并检查实时'中的代码和变量。 我总是在我的代码上使用这种方法,它非常有用。

建议:您可以使用MZTools 8.x加载项(均为VB6 / NET)自动编写此错误处理程序 不幸的是,版本8.x不是更长的免费软件,因为版本3.x(特定于VB6)但是幸运的是,你可以为 Wayback Machine下载版本3

MZ-Tools 3.00.1212发布(2013年10月10日)

https://web.archive.org/web/20150206030204/http://mztools.com:80/v3/download.aspx

答案 1 :(得分:1)

原始的BASIC解释器要求每行必须以唯一的号码开头。您可能会心地学习它们,输错行号,并使程序变得一团糟。使用诸如AUTO之类的元命令来自动化这项繁琐的工作。行号之间的间隔通常为10,因此可以插入新行,而无需将所有数字都移到下面。

解释器运行时跟踪了当前正在执行的语句的行号。它存储在一个特殊变量中,有时可以使用保留关键字进行访问,有时可以使用absurd kludges进行访问。

使用Microsoft Visual Basic,这一要求成为了一种选择,即使在经验丰富的VB6开发人员中这也是鲜为人知的事实。这很复杂,因为VB6具有用于行连续的语法(_字符),因为它只是一种编辑约定,并且被解释器视为单行,所以它要求行号之间有空格。

开发人员可以在错误处理程序中使用该信息。保留关键字Erl存储发生 ON ERROR跳转的行号:

Print Erl '"error line"

在VB6中尝试该操作时,会发现它始终为零,除非您为当前SUBFUNCTION中的每个语句分配唯一的行号

1000    Private Sub Test()
1010    On Error Goto Err1
1020        Dim I As Long, _ 'see how the line continuation has just one line #
                J as Long
1030        I = 1
1040        J = 0
1050        Print I / J
1060    On Error Goto 0
1070        'succeeded (unlikely)
1080        Exit Sub
1090    Err1:
1100        Print Erl 'will print 1050
1110    End Sub

为什么有用?

Err ...好吧,有时候, 遗留应用程序仍在客户端(* shush *)的完全关键业务生产使用中,这些错误会导致无法在Windows XP Home Edition上不受支持的旧版开发环境中复制。因此,我们使用错误消息的总是冗长的文本来标识导致代码的模块,快速添加这些行号,修补可怜的客户端,并从退役很久以来就从开发人员那里获得一些year2k错误的行号。

在VB6中没有类似于反射或VB.NET的程序调试数据库的概念,因此,包含有关调用堆栈信息的唯一已知方法是手动或以字符串文字的形式重复执行过程的名称。使用工具,如accepted answer所示。