1

我有一个 VB 脚本。我需要将错误信息记录在一个文件中。我需要记录所有信息,例如错误号错误描述以及错误发生在哪个子例程中。

请提供一些代码

4

4 回答 4

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来获取有关错误的更详细信息,例如行号等(请记住将 CreateObject 替换为 Server.CreateObject)。

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

于 2008-10-16T10:04:26.780 回答
3

VBScript 不支持错误 goto 标签。以下代码将永远无法工作-:

On Error GoTo HandleError '' on error 将代码跳转到指定信号

暗淡 aa = 15 / 0

GoTo Finish '' 跳过错误

处理句柄错误:

暗淡消息集

msg = Err.Description & vbCrLf & Err.Number

MsgBox msgFinish:'' sciprt 结束

于 2008-11-20T11:05:15.517 回答
1

将您的整个子程序或函数放在一个 do 循环(或其他循环)中。将错误处理放在 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
于 2010-12-05T01:13:06.903 回答
-3

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

  • On Error Resume Next '' 忽略错误
  • On Error GoTo 0 '' 删除错误处理
  • On Error GoTo HandleError '' on error 将代码跳转到指定信号

样品:

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
于 2008-10-16T07:35:02.103 回答