Asp classic ASP/VBScript错误对象中缺少属性

Asp classic ASP/VBScript错误对象中缺少属性,asp-classic,Asp Classic,这与另一个问题不同,因为另一个问题中的建议对我无效。我特别想确定在我的情况下,这不起作用有什么不同 我在经典ASP中工作。根据我在这里和其他地方在线找到的文档:,ASP错误对象应具有以下属性: 描述:返回错误的简短描述 File:返回生成错误的ASP文件的名称 Line:返回检测到错误的行号 Number:返回错误的标准COM错误代码 我有以下测试代码。注意:error_log是一个将文本写入日志文件的自定义函数 on error resume next blah if err.

这与另一个问题不同,因为另一个问题中的建议对我无效。我特别想确定在我的情况下,这不起作用有什么不同

我在经典ASP中工作。根据我在这里和其他地方在线找到的文档:,ASP错误对象应具有以下属性:

描述:返回错误的简短描述 File:返回生成错误的ASP文件的名称 Line:返回检测到错误的行号 Number:返回错误的标准COM错误代码 我有以下测试代码。注意:error_log是一个将文本写入日志文件的自定义函数

on error resume next
    blah
    if err.number > 0 then
        error_log( err.number )
        error_log( err.description )
        error_log( err.file )
        error_log( err.line )
    end if
on error goto 0
前两行,编号和说明,按预期书写;但文件和行不是。据我所知,后两个属性对于我的ASP/VBScript副本根本不可用。为什么我没有这些属性

我正在运行我认为是最新的约2000年版本的经典ASP VBScript。直接从马嘴里:VBScript 5.8 build 16384

编辑:尝试运行Server.GetLastError失败。看来我因为某种原因没有那个命令。[更正:它运行,但似乎没有数据。请参见下面的示例]

新示例:

On Error Resume Next
    blah    'This is our error. unrecognized variable'
    Set error = Server.GetLastError()
    response.write error.file
On Error Goto 0
response.end
这将导致一个空白屏幕。没有写入错误数据

另一个测试。注意错误与自动生成的错误:

On Error Resume Next
    blah    'This is our error. unrecognized variable'
    Set error = Server.GetLastError()
    response.write error.number
    response.write " | "
    response.write err.number
    response.write "<br>" & vbCrLf
    response.write error.description
    response.write " | "
    response.write err.description
    response.write "<br>" & vbCrLf
    response.write error.file
    response.write " | "
    response.write error.line
On Error Goto 0
response.end

对于初学者,每个用户Lankymart,自动err对象和Server.GetLastError返回的对象之间存在差异。为此,我们需要两者中的后者

看来经典ASP返回的错误代码略有不同:500.100;因此,如果您想要捕获错误数据,您必须为该子代码显式地创建一个错误页面

信息可在此处找到:

如果有脚本,Classic ASP始终返回500.100状态 错误[…]

如果您希望捕获经典ASP脚本错误并能够读取 自定义错误页中的Server.GetLastError对象,例如 日志记录您需要专门为500.100提供一个处理程序

如果未指定自定义500.100错误,则IIS将退回到 您的自定义或其自己的500错误页,但Server.GetLastError 不会提供有关错误的任何有用信息

因此,就地错误引用不起作用,捕捉标准500错误也不起作用。您需要显式地捕获500.100代码。对于常规的500错误,Server.GetLastError返回一个没有数据的对象,这正是我一直遇到的问题

所以我复制了一份我的站点的500错误页面,并对其进行了修改,以同时写入我的错误日志。然后在IIS中,我将该新文件设置为500.100错误的错误页。它似乎在工作


这并不能完全解决我的问题,因为我试图创造一种尝试。。。可以内联运行的捕获例程。但它确实让我能够简单地记录错误,这非常有用。

在处理经典ASP时使用Server.GetLastError。VBScript错误对象与ASPError对象不同。可能重复无骰子。不确定我是否正确使用了server.getlasterror。我是否简单地将其设置为变量?设置err=Server.GetLastError,然后调用err.file或其他什么?根据您的具体措辞,Server.GetLastError似乎失败了。我发现这有帮助:但是。。。无法获取发生错误的文件或行??“似乎失败”-这有什么帮助?它是如何失败的,您是否遇到语法错误?对象是否为空?什么
0 | 500
| Variable is undefined
| 0