Классический ASP - отлов 500 ошибок - PullRequest
8 голосов
/ 08 августа 2011

Я пытаюсь диагностировать проблему с сайтом, который, кажется, где-то выдает ошибку в коде. Из журналов ошибок кажется, что это синтаксическая ошибка SQL, вызванная неправильной конкатенацией SQL-запроса с плохим кодом. Моя проблема в том, что я не могу воспроизвести ошибку, но клиенты все еще получают ее, и это может быть вызвано рядом запросов. Поэтому я планирую создать свою собственную страницу с ошибкой 500, чтобы поймать результат.

Я хочу, чтобы страница перехватила все данные сеанса, все данные POST и GET (что я могу сделать), но я также хочу получить подробную информацию об ошибке. Многое из того, что будет отображаться на странице, когда сайт позволяет отображать ошибки. С маленькой стрелкой, указывающей линию.

Есть ли способ отловить ошибку на пользовательской странице 500 ошибок?

Заранее спасибо

Grant

Ответы [ 2 ]

14 голосов
/ 09 августа 2011

Вы можете получить хорошую, но не очень полезную информацию от ASP, если у вас есть ошибка.

Но вы можете определить пользовательскую кодовую страницу 500 ошибок в ASP ASP, которая может дать вамнемного больше информации, когда ваша программа падает.Вот пример кода, который создаст довольно приличное сообщение об ошибке.

  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/

3 голосов
/ 08 августа 2011

Обычно вы устанавливаете «при возобновлении ошибки далее», а затем проверяете код ошибки «Err.Number» после ошибочной строки кода на ненулевые значения.

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

...