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

时间:2010-01-19 07:23:12

标签: vb6 error-handling

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

  

我用过   Err.Description,Err.Source 的   但它给出了空白值。

请帮帮我。

 my method(......

    On Error GoTo Error_Handler

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

4 个答案:

答案 0 :(得分:4)

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

Dim sMsg As String

On Error Goto ErrHandler

' ...code here...

Exit Function

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

答案 1 :(得分:2)

顺便说一句,谢谢你们的帮助我的答案。我比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每个处理的订单。 (也许你不想那样)。 On Error GoTo -1重置错误,以便它再次起作用。显然,Err只能“一次”工作。

我写了一个php脚本来构建VB​​6源代码来运行8000个odbc查询......:P

答案 2 :(得分:1)

你肯定,Exit Function正好位于Error_Handler:之上吗?

答案 3 :(得分:0)

    my method(......

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

在处理Error_Handler函数之前应该添加“Exit Sub”.......