2008-10-16 57 views
1

我有一个VB脚本。我需要将错误信息记录在文件中。我需要记录每个信息,如错误编号错误描述以及哪个子程序发生错误。如何处理VB脚本中的错误

请提供一些代码

+2

如果你概述了为什么你认为你需要这个函数,那可能会更好。坦率地说,VBScript错误处理非常薄弱,没有实际的方法来实现你迄今为止描述的内容。 – AnthonyWJones 2008-10-16 14:39:56

回答

-3

对于VBScript中的错误处理使用“On Error”clausule。 有3种方式,如何处理错误:

  • 上的错误继续下一步'忽略错误
  • 对错误转到0“”删除错误handlning
  • 对错误转到的HandleError'的错误会编写跳转到指定的信号

样品:

On Error Resume Next '' ignore errors 
SomeIgnorableFunction() 

On Error GoTo 0 '' removes error ignoring 
SomeImportantFunction() 

On Error GoTo HandleError '' on error will code jump to specified signal 
Dim a 
a = 15/0 

GoTo Finish '' skips error handling 

HandleError: 
Dim msg 
Set msg = Err.Description & vbCrLf & Err.Number 
MsgBox msg 

Finish: 
'' there is end of sciprt 
+15

Thee is no On Error GoTo Handler feature in VBScript nor a Goto in VBScript – AnthonyWJones 2008-10-16 14:32:38

3

您可以使用的如果您使用的是VBScript,则为FileSystemObjectError对象。

将以下内容粘贴到error.vbs中并运行它。它会抛出那么错误日志的详细到一个名为C:\ errors.log

Option Explicit 

On Error Resume Next ' Potential error coming up 
Dim MyArray(5) 
MyArray(7) = "BWA HA HA" 
If Err.Number <> 0 Then 
    LogError(Err) 
    Err.Clear 
End If 
On Error Goto 0 ' Stop looking for errors 

Sub LogError(Details) 
    Dim fs : Set fs = CreateObject("Scripting.FileSystemObject") 
    Dim logFile : Set logFile = fs.OpenTextFile("c:\errors.log", 8, True) 
    logFile.WriteLine(Now() & ": Error: " & Details.Number & " Details: " & Details.Description) 
End Sub 

如果您使用的是ASP页面,那么你可以利用ASPError,以获取有关错误等更详细的信息作为行号等(请记住用Server.CreateObject替换CreateObject)。

编辑: 要获取在.vbs脚本中导致错误的行号,您可以将此作为参数添加到子例程中。

2

VBScript在错误goto标签上不支持。下面的代码行不通片 - :

对错误转到的HandleError“”上的错误将编码跳转到规定的信号

昏暗AA = 15/0

转到完成“”跳过错误

handlingHandleError:

昏暗msgSet

MSG = Err.Description & vbCrLf &的Err.Number

MSGBOX msgFinish:“”有sciprt

1

末把你的整个子或功能上做回路(或其他循环)内。把你的错误处理放在do循环的外部

private sub BucketList() 
do while 1=1 
    ClimbMountain(top) 
    if err.Number <> 0 then exit do 
    SwimOcean(deep) 
    if err.Number <> 0 then exit do 
    GiveErrorHandlingToVBS(isNeverGoingToHappen) 
    if err.Number <> 0 then exit do 

    exit do 
loop 

'Error Handler 
if err.Number <> 0 then 
    'handle error 
end if 

end sub