经典 ASP - 捕获 500 错误

Posted

技术标签:

【中文标题】经典 ASP - 捕获 500 错误【英文标题】:Classic ASP - Catching 500 Errors 【发布时间】:2011-08-08 19:36:17 【问题描述】:

我正在尝试诊断一个网站的问题,该网站似乎在某处的代码中抛出错误。从错误日志来看,这似乎是由于 SQL 查询与错误代码的错误连接导致的 SQL 语法错误。我的问题是,我无法重现该错误,但客户仍然收到它,这可能是由许多查询引起的。所以我的计划是创建自己的 500 错误页面来捕获结果。

我想让页面捕获所有会话数据、所有 POST 和 GET 数据(我可以这样做),但我也想捕获有关错误的详细信息。当网站允许显示错误时,页面上几乎会显示什么。用小箭头指定线。

有没有办法从自定义的 500 错误页面捕获错误?

提前致谢

授予

【问题讨论】:

【参考方案1】:

当您遇到错误时,您可以从 ASP 获得很好但不是很好的信息。

但是您可以在 ASP 领域使用define a custom 500 error code page,当您的程序崩溃时,它可以为您提供更多信息。下面是一些示例代码,它们将构建关于您的错误的相当不错的错误消息。

  Set objASPError = Server.GetLastError

  Dim strProblem
  strProblem = "ASPCode: " & Server.htmlEncode(objASPError.ASPCode) & vbCrLf
  strProblem = strProblem & "Number: 0x" & Hex(objASPError.Number) & vbCrLf
  strProblem = strProblem & "Source: [" & Server.HTMLEncode(objASPError.Source) & "]" & vbCrLf
  strProblem = strProblem & "Category: " & Server.HTMLEncode(objASPError.Category) & vbCrLf
  strProblem = strProblem & "File: " & Server.HTMLEncode(objASPError.File) & vbCrLf
  strProblem = strProblem & "Line: " & CStr(objASPError.Line) & vbCrLf
  strProblem = strProblem & "Column: " & CStr(objASPError.Column) & vbCrLf
  strProblem = strProblem & "Description: " & Server.HTMLEncode(objASPError.Description) & vbCrLf
  strProblem = strProblem & "ASP Description: " & Server.HTMLEncode(objASPError.ASPDescription) & vbCrLf
  strProblem = strProblem & "Server Variables: " & vbCrLf & Server.HTMLEncode(Request.ServerVariables("ALL_HTTP")) & vbCrLf
  strProblem = strProblem & "QueryString: " & Server.HTMLEncode(Request.QueryString) & vbCrLf
  strProblem = strProblem & "URL: " & Server.HTMLEncode(Request.ServerVariables("URL")) & vbCrLf
  strProblem = strProblem & "Content Type: " & Server.HTMLEncode(Request.ServerVariables("CONTENT_TYPE")) & vbCrLf
  strProblem = strProblem & "Content Length: " & Server.HTMLEncode(Request.ServerVariables("CONTENT_LENGTH")) & vbCrLf
  strProblem = strProblem & "Local Addr: " & Server.HTMLEncode(Request.ServerVariables("LOCAL_ADDR")) & vbCrLf
  strProblem = strProblem & "Remote Addr: " & Server.HTMLEncode(Request.ServerVariables("LOCAL_ADDR")) & vbCrLf
  strProblem = strProblem & "Time: " & Now & vbCrLf

编辑 在 IIS7 上 GetLastError 似乎没有任何可用信息。 您可以通过创建 500.100 并将其指向您的脚本来解决此问题。 YMMV,查看这些 URL 以获取更多信息 http://forums.iis.net/t/1150502.aspx 和 http://www.tacticaltechnique.com/web-development/classic-asp-getlasterror-in-iis7/

【讨论】:

【参考方案2】:

一般你设置“on error resume next”,然后在有问题的代码行之后检查错误代码“Err.Number”是否有非零值。

见:http://www.powerasp.com/content/new/on-error-resume-next.asp

【讨论】:

以上是关于经典 ASP - 捕获 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

IIS7 上的经典 ASP:拒绝在 500 Internal Server Error 上向浏览器发送错误

500错误信息详解,ASP+IIS 7.5

WCF IIS 服务器 500 错误 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)

网站HTTP 错误 500.24 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。

IIS集成和经典配置

HTTP错误500.22 检测到在集成的托管管道模式下不适用的ASP.NET设置