我在VB6中开发了一个应用程序。在客户端环境中,它会引发运行时错误,我无法在调试器下重现这些错误。有没有办法得到堆栈跟踪或错误的位置? 我创建了日志文件和
我用过 Err.Description,Err.Source 的 但它给出了空白值。
请帮帮我。
my method(......
On Error GoTo Error_Handler
.........
Error_Handler :
writeToLogFile(Err.Source,Err.Description)
答案 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)
无论如何,在进行错误检查时,在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脚本来构建VB6源代码来运行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”.......