ASP/VBScript 错误对象中缺少属性
Properties missing from ASP/VBScript error object
This is not the same as the other question because the advice in the other question fails to work for me. I'm specifically trying to determine what's different in my case that this doesn't work.
我在经典 ASP 工作。根据我在网上找到的文档(此处和其他地方: https://www.w3schools.com/ASp/asp_ref_error.asp ), ASP 错误对象应具有以下属性,其中包括:
- 描述:Returns错误的简短描述
- 文件:Returns 生成错误的 ASP 文件的名称
- 行:Returns检测到错误的行号
- 编号:Returns 错误的标准 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
前两行,number
和description
,写得符合预期;但是 file
和 line
不是。据我所知,后两个属性对于我的 ASP/VBScript 副本根本不可用。为什么我没有这些属性?
我正在 运行我认为是经典 ASP VBScript 的最新(大约 2000 年)版本。直接来自马口:VBScript 5.8 build 16384
编辑:尝试 运行 Server.GetLastError()
失败。由于某种原因,我似乎没有该命令。 [更正:它 运行s 但似乎没有数据。请参阅下面的示例]
新的最小示例:
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
这会导致出现空白屏幕。没有写入错误数据。
另一个测试。注意 "error" 与自动生成的 "err":
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
结果:
0 | 500
| Variable is undefined
| 0
对于初学者,对于每个用户 Lankymart,自动 err
对象和 Server.GetLastError()
返回的对象之间存在差异。为此,我们需要两者中的后者。
似乎Classic ASP returns 略有不同的错误代码:500.100
;所以如果你想捕获错误数据,你必须为该子代码明确地制作一个错误页面。
在此处找到的信息:
Classic ASP has always returned a 500.100 status if there is a script
error[...].
If you want to catch Classic ASP script errors and be able to read the
Server.GetLastError() object in your custom error page (say for
logging) you need to provide a handler specifically for 500.100.
If you don't specify a custom 500.100 error then IIS will fall back to
your custom (or its own) 500 error page but Server.GetLastError()
won't provide any useful information about the error.
所以引用 "in place" 的错误不起作用,捕获标准 500 错误也不起作用。您需要明确捕获 500.100 代码。在常规 500 错误中,Server.GetLastError()
returns 一个没有数据的对象——这正是我一直遇到的问题。
所以我复制了我网站的 500 错误页面,并将其修改为也写入我的错误日志。然后在 IIS 中,我将该新文件设置为 500.100
错误的错误页面。它似乎在工作。
这并没有完全 解决我的问题,因为我试图创建一种可以 运行 内联的 try ... catch
例程。但它确实让我能够简单地记录错误,这非常有用。
This is not the same as the other question because the advice in the other question fails to work for me. I'm specifically trying to determine what's different in my case that this doesn't work.
我在经典 ASP 工作。根据我在网上找到的文档(此处和其他地方: https://www.w3schools.com/ASp/asp_ref_error.asp ), ASP 错误对象应具有以下属性,其中包括:
- 描述:Returns错误的简短描述
- 文件:Returns 生成错误的 ASP 文件的名称
- 行:Returns检测到错误的行号
- 编号:Returns 错误的标准 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
前两行,number
和description
,写得符合预期;但是 file
和 line
不是。据我所知,后两个属性对于我的 ASP/VBScript 副本根本不可用。为什么我没有这些属性?
我正在 运行我认为是经典 ASP VBScript 的最新(大约 2000 年)版本。直接来自马口:VBScript 5.8 build 16384
编辑:尝试 运行 Server.GetLastError()
失败。由于某种原因,我似乎没有该命令。 [更正:它 运行s 但似乎没有数据。请参阅下面的示例]
新的最小示例:
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
这会导致出现空白屏幕。没有写入错误数据。
另一个测试。注意 "error" 与自动生成的 "err":
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
结果:
0 | 500
| Variable is undefined
| 0
对于初学者,对于每个用户 Lankymart,自动 err
对象和 Server.GetLastError()
返回的对象之间存在差异。为此,我们需要两者中的后者。
似乎Classic ASP returns 略有不同的错误代码:500.100
;所以如果你想捕获错误数据,你必须为该子代码明确地制作一个错误页面。
在此处找到的信息:
Classic ASP has always returned a 500.100 status if there is a script error[...].
If you want to catch Classic ASP script errors and be able to read the Server.GetLastError() object in your custom error page (say for logging) you need to provide a handler specifically for 500.100.
If you don't specify a custom 500.100 error then IIS will fall back to your custom (or its own) 500 error page but Server.GetLastError() won't provide any useful information about the error.
所以引用 "in place" 的错误不起作用,捕获标准 500 错误也不起作用。您需要明确捕获 500.100 代码。在常规 500 错误中,Server.GetLastError()
returns 一个没有数据的对象——这正是我一直遇到的问题。
所以我复制了我网站的 500 错误页面,并将其修改为也写入我的错误日志。然后在 IIS 中,我将该新文件设置为 500.100
错误的错误页面。它似乎在工作。
这并没有完全 解决我的问题,因为我试图创建一种可以 运行 内联的 try ... catch
例程。但它确实让我能够简单地记录错误,这非常有用。