如何在VB6中打印错误行

如何在VB6中打印错误行,vb6,Vb6,我正在寻找一种在启动错误处理程序时打印错误行的方法。 是否存在获取错误行和打印它的函数名的方法?您可以使用错误处理程序: Public Function DoSomething() As Boolean On Error GoTo ERR_HANDLER ' your code DoSomething = True Exit Function ERR_HANDLER: MsgBox Err.Description & vbCrLf &

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

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

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
(*)这允许中断错误并“实时”检查代码和变量 我总是在我的代码中使用这个方法,它非常有用

建议:您可以使用8.x加载项自动编写此错误处理程序(均适用于VB6/NET) 不幸的是,8.x版不再像3.x版(特定于VB6)那样是免费软件,但幸运的是,您可以下载Wayback机器的3版

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


原始的基本口译员要求每一行必须以唯一的数字开头。你可以把它们背下来,输入错误的行号,把你的程序搞得一团糟。像
AUTO
这样的元命令被用来自动化这项繁琐的工作。行号之间的间隔通常为10,因此可以插入新行,而无需移动下面的所有数字

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

在Microsoft Visual Basic中,这一要求成为了一种选择,即使在经验丰富的VB6开发人员中,这也是一个鲜为人知的事实。这是复杂的,因为VB6有一个行延续的语法(字符
),它要求行号中有空格,因为它只是一个编辑器惯例,被解释器当作一行处理

开发人员可以在错误处理程序中使用这些信息。保留关键字
Erl
存储导致
出错的行数
跳转:

Print Erl '"error line"
在VB6中尝试此操作时,您会发现它始终为零,除非为当前
SUB
函数
中的每个语句指定一个唯一的行号

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
这为什么有用? 呃。。。有时候,客户机(*shush*)可能仍在完全使用业务关键型生产的遗留应用程序,这些应用程序抛出的错误无法在Windows XP Home Edition上不受支持的遗留开发环境中重现。因此,我们使用错误消息的总是冗长的文本来识别导致错误的代码模块,快速添加那些行号,修补糟糕的客户端,并从一个退休很久的开发人员那里得到一些year2k错误的行号


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

中所示,您可以使用erl命令获取最后一个错误的行号。但是,它确实要求您的源代码具有行号