VB6-如何在运行时捕获异常或错误

VB6-如何在运行时捕获异常或错误,vb6,error-handling,Vb6,Error Handling,我用VB6开发了一个应用程序。在客户端环境中,它会引发运行时错误,我无法在调试器下重现这些错误。有没有办法获取stacktrace或错误位置? 我创建了日志文件和 我曾经 Err.Description,Err.Source 但它给出了空白值 请帮帮我 my method(...... On Error GoTo Error_Handler ......... Error_Handler : writeToLo

我用VB6开发了一个应用程序。在客户端环境中,它会引发运行时错误,我无法在调试器下重现这些错误。有没有办法获取stacktrace或错误位置? 我创建了日志文件和

我曾经 Err.Description,Err.Source 但它给出了空白值

请帮帮我

 my method(......

    On Error GoTo Error_Handler

             .........
    Error_Handler : 
                  writeToLogFile(Err.Source,Err.Description)

在写入日志文件之前,您可能已经清除了Err对象。这是非常非常容易做到的。您要做的是,一旦检测到错误发生,在执行任何其他操作之前获取错误消息。然后将错误消息传递给您正在使用的任何日志记录例程。例如:

Dim sMsg As String

On Error Goto ErrHandler

' ...code here...

Exit Function

ErrHandler:
sMsg = "Error #" & Err.Number & ": '" & Err.Description & "' from '" & Err.Source & "'"
GoLogTheError sMsg

您是否确实在错误处理程序上方有一个退出功能:?

顺便说一句,谢谢你们的回答帮助我。我玩VB6游戏已经晚了五年了。除非迫不得已,否则我不开窗户

无论如何,在进行错误检查时,比如说在3000个单独的记录查询插入中,我学到了一些技巧。考虑这个代码块:

'----- order number 1246-------
On Error Goto EH1246:
sSql="insert into SalesReceiptLine ( CustomerRefListID,TemplateRe..."
oConnection.Execute sSQL
sSql="SELECT TxnID FROM SalesReceiptLine WHERE RefNumber='1246'..."
  oRecordset.Open sSQL, oConnection
sTxnId = oRecordset(0)
  oRecordset.Close
sSql="INSERT INTO SalesReceiptLine (TxnId,SalesReceiptLineDesc,Sal..."
  oConnection.Execute sSQL
EH1246:
IF Err.Number<>0 THEN
    sMsg = sMsg & "Order # 1246; sTxnId = " & sTxnId & _
        vbCrLf & Err.Number & ": " & Err.Description & vbCrLf
sErrOrders = sErrOrders & "1246,"
End If
On Error GoTo -1
'----- order number 1247-------
On Error Goto EH1247:
当不测试Err.Number时,处理的每个订单都会得到一个0。也许你不想那样。On Error GoTo-1重置错误,使其再次工作。显然,Err只起作用一次

我编写了一个php脚本来构建VB6源代码,以运行大约8000个odbc查询…:P

    my method(......

        On Error GoTo Error_Handler
........
    Exit Sub
        Error_Handler : 
                      writeToLogFile(Err.Source,Err.Description)

在处理错误处理函数之前,应添加Exit Sub

您可能知道这一点,但为了以防万一,VB6在2008年3月完全不受支持:我猜您是在提供遗留支持或其他什么。@T.J.Crowder。这并不完全正确。VB6 IDE不受支持,但VB6运行时在Windows 7的完整支持期内受支持,该支持期到2019年左右@MarkJ:非常有用,谢谢@OP和其他读者:如果你没有阅读链接,请明确当他们说IDE时,其中包括编译器,例如,编译器已经被不支持超过一年半;Windows 7将继续支持运行时,但他们在那篇文章中明确表示,除此之外,运行时不受支持。再次干杯,马克。@T.J.克劳德。又是我,对不起!文章说,没有计划在Windows7以后的Windows版本中加入VB6运行时。我想这并不是说他们肯定不会在Windows7之外支持它。它只是说,他们还没有下定决心,但在某种程度上,他们打算把人们推离VB6。这和他们在Windows7之前对Vista所说的是一样的。从这样一个关于支持的非声明中无法得出任何结论。我已经这样做了。但有时Err.Description会给我一个空值。Err.Description可以是空的试试这个错误。提高1234567看看会发生什么,Err.Number应该总是有一个值。哦,不错,这是一个典型的错误。虽然你会想到如果他带着调试器走过去…@T.J.Crowder即使如此。。。没有对罗森不尊重的意思,因为我知道我以前肯定忽略了明显的东西哦,绝对的。你和我都是。有趣的是,我的回答显示了内联用法,而不是函数外部可能的预期用法。错误时转到0是清除错误处理程序的标准方法。要重置错误,使其再次工作,请使用Err.Clear。那么它将不止一次工作