Отладка объектов сценария на страницах ASP
Обновлен: Ноябрь 2007
Для отладки объектов сценария на страницах ASP необходимо ознакомиться со следующими вопросами:
Что такое модель объектов сценария?
Отладка и библиотека сценариев
Включение отладки объекта сценария
Ведение отчетов об ошибках
Трассировка событий
Трассировка предупреждений
Что такое модель объектов сценария?
Модель объектов сценария ASP определяет набор объектов с событиями, свойствами и методами, которые можно использовать в веб-приложении. Большинство объектов сценария представляют собой элементы интерфейса пользователя, например, кнопки и текстовые поля, которые работают так же, как элементы управления в Microsoft Visual Basic.
Объекты сценария в Microsoft Visual Studio 2005 не требуют наличия особой среды выполнения, поскольку они определены в файлах сценария, которые добавляются к странице ASP при их использовании. Несмотря на то, что эти файлы являются простыми сценариями, они инкапсулируют команды ActiveX Data Objects (ADO) и элементы HTML для создания сложных объектов, поддерживающих программирование, управляемое событиями.
Любой объект сценария существует в двух версиях: один выполняется на сервере в ASP для универсальных обозревателей HTML версии 3.2, а второй выполняется на клиентском компьютере в Internet Explorer 4.0 или более поздней версии. Модель программирования (события, методы и свойства) едина для обеих версий. Объекты сценария можно создавать и использовать непосредственно из кода или с помощью элементов управления времени разработки. При сохранении страницы ASP код объекта сценария сохраняется в виде сочетания стандартного кода HTML и кода сценария.
Отладка и библиотека сценариев
Поскольку сами объекты также пишутся на языке сценариев, то отладка сценариев, взаимодействующих с моделью объектов сценария, может быть затруднена по следующим причинам:
Во-первых, при пошаговой отладке сценария можно столкнуться с незнакомым и сложным кодом библиотеки сценариев.
Во-вторых, если в библиотеке сценариев существует ошибка, то ее пошаговая отладка может занять много времени и может не привести к выявлению этой ошибки.
И, наконец, достаточно сложно отследить последовательность событий и поток команд управления между сценарием и моделью объектов сценария.
В подобных случаях отладка приложения может выполняться со следующими параметрами модели объектов сценария:
Отслеживание ошибок низкого уровня. Если объект сценария, например Recordset, встречает ошибку, то он может выдать подробное сообщение об ошибке. С помощью этого параметра можно находить в компонентах ошибки, возникающие благодаря внешним причинам.
Трассировка событий. Можно задать отображение списка событий, порождаемых на странице, строящегося по мере их возникновения. Этот параметр позволят отслеживать запуск сценариев в зависимости от событий модели объектов сценария.
Трассировка предупреждений. Можно просматривать сообщения с предупреждениями о возможных неявных ошибках, которые в противном случае остались бы незамеченными. Этот параметр позволяет разрешать проблемы, связанные, например, с передачей в метод неверных параметров.
Включение отладки объекта сценария
Обычно в верхней части страницы ASP находится блок сценария с параметрами отладки. По умолчанию параметры отключены. Блок сценария выглядит следующим образом:
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug=false
@set @trace=false
</SCRIPT>
Для отладки объекта сценария на сервере должен работать JScript 5.0 или более поздних версий. JScript версии 5.0 можно загрузить на сервер с веб-узла корпорации Майкрософт.
Чтобы включить отладку, необходимо задать для требуемых параметров истинные значения. Например, для отслеживания ошибок низкого уровня код нужно изменить следующим образом:
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug = true
@set @trace = false
</SCRIPT>
Блок параметров отладки должен стоять после директивы @language в верхней части страницы ASP.
Всего доступно четыре параметра:
Имя |
Назначение |
---|---|
@debug |
Записывает выбранные ошибки в определенных объектах сценария. |
@trace |
Включает оба следующих параметра трассировки. |
@trace_events |
Включает трассировку событий. |
@trace_warnings |
Включает предупреждения о возможных неявных ошибках, обычно проходящих незамеченными. |
Дополнительные сведения, касающиеся отдельных параметров, см. в разделах ниже.
Примечание. |
---|
Если значение @trace равно true, то параметры @trace_events и @trace_warnings переопределяются соответствующим образом. Однако в том случае, если @trace имеет значение false, включение и выключение каждого параметра трассировки выполняется отдельно. |
Поскольку отдельные параметры трассировки не входят в стандартный блок сценария на странице ASP, то при необходимости их нужно туда добавить. Например, трассировка событий без создания предупреждений задается следующим образом:
<SCRIPT id=DebugDirectives runat=server language=javascript>
@set @debug = false
@set @trace = false
@set @trace\_events = true
</SCRIPT>
При использовании Microsoft Internet Explorer 4.x задание любого параметра @trace приведет к переопределению тега BODY; при этом может произойти отключение привязки событий в этом теге, и атрибуты будут пропущены. Эта проблема не возникает в Internet Explorer 5.0 или более поздних версий.
Следующий стиль привязки событий не работает в Internet Explorer 4.0:
<BODY onload="initialize()">
Чтобы обойти это ограничение, следует использовать другой механизм привязки. При работе с Visual Basic, Scripting Edition (VBScript) можно использовать неявную привязку:
<SCRIPT LANGUAGE="VBScript">
Function window_onload()
initialize()
End Function
</SCRIPT>
При работе с Jscript можно вызвать глобальный сценарий, который присваивает событию объекта окна указатель функции, как показано ниже:
<SCRIPT LANGUAGE="JScript">
window.onload = initialize
</SCRIPT>
Если тег BODY содержит атрибуты, то их значения необходимо задать в сценарии, задав свойства объекта документа. Так, если тег BODY содержит атрибут "BGCOLOR="#FFFF00"", то его можно задать с помощью сценария следующим образом. Для вызова этого сценария при первой загрузке документа используйте вышеописанный метод.
<SCRIPT LANGUAGE="JScript">
function initialize(){
document.bgColor = "#FFFF00";
}
</SCRIPT>
Ведение отчетов об ошибках
Некоторые объекты сценария взаимодействуют с другими объектами, находящимися вне страницы. Например, для доступа к базам данных объект Recordset использует объекты ADO. Если при взаимодействии возникают ошибки, данные об этих ошибках, поступающие от внешних объектов, могут быть неоднозначными или казаться неполными в контексте страницы.
Параметр @debug включает механизм оповещения, который выполняет отслеживание и интерпретацию общего набора ошибок данного типа. Данные об ошибках записываются на страницу ASP и отображаются вместе с обычным содержимым страницы. В некоторых случаях также появляются сообщения об ошибках, находящихся уровнем ниже.
Например, если параметр @debug имеет значение true и объект Recordset выполняет недопустимый оператор SQL, на странице будут отображены следующие данные:
SCRIPTING OBJECT MODEL EXCEPTION:
FILE: recordset.asp
FUNCTION: Recordset1.open()
DESCRIPTION: Failed to open the ADO recordset. Check for the following
possible causes:
An invalid SQL statement.
Missing or invalid database object name (check Recordset DTC properties)
Missing parameters or parameter type mismatch (parameters must be set
before recordset is opened).
Трассировка событий
При использовании модели объектов сценария на странице ASP отдельные объекты сценария порождают события в ответ на изменения состояния (например, Recordset1_ondatasetcomplete) или в ответ на действия пользователя (например, Button1_onclick). Часто возникает необходимость знать о взаимосвязи между выполнением сценария и событиями, порождаемыми моделью объектов сценария.
Для этого следует включить трассировку событий, задав для параметра @trace или @trace\_events значение true. Если трассировка событий включена, данные о событии записываются на страницу ASP при его возникновении. Например, часть страницы ASP может выглядеть следующим образом:
EVENT TRACE: thisPage fired oninit event.
EVENT TRACE: Recordset1 fired onbeforeopen event.
EVENT TRACE: Recordset1 fired onrowenter event.
EVENT TRACE: Recordset1 fired ondatasetchanged event.
EVENT TRACE: Recordset1 fired ondatasetcomplete event.
Чтобы определить момент выполнения сценария, в нужных местах следует добавить операторы Response.Write, как показано в следующем примере сценария. В этом примере для объекта Recordset, основанного на данных текстового поля, задается параметр. Каждый шаг выполнения отображается на странице.
Sub btnQuery_onclick()
Recordset1.close()
Response.Write("Finished closing recordset.")
Recordset1.setParameter 1, txtLastName.value
Response.Write("Finished resetting query parameter.")
Recordset1.open()
Response.Write("Finished reopening recordset.")
End Sub
Используя команды условной компиляции JScript, операторы Response.Write можно задать на странице так, чтобы они появлялись там только в случае, если заданы параметры отладки. Например, в следующем блоке оператор Response.Write выполняется только в том случае, если значение параметра @trace равно true:
@if (@trace)
Response.Write("Ready to set SQL statement parameters.");
@end
Допустимо не только использование параметров отладки, но и создание собственных флагов условий, как показано в следующем примере:
@set @trace\_custom = true
' ... other script here
@if (@trace_custom)
Response.Write("Ready to set SQL statement parameters.");
@end
Примечание. |
---|
Перед выпуском страниц необходимо задать для всех условий отладки значения false. |
Дополнительные сведения об условной компиляции см. в описании команд @if и @set в разделе "Операторы" на веб-узле Microsoft Scripting.
Трассировка предупреждений
С целью повышения надежности объектов сценария и уменьшения количества нежелательных данных, отображаемых на странице ASP, объекты сценария не предоставляют сведения об устранимых ошибках. Например, если при передаче недопустимого значения методу объекта сценария в объекте не возникает неустранимой ошибки, то этот объект, как правило, продолжает выполнение, и сообщение об ошибке не возникает. Тем не менее, при разработке приложения может возникнуть необходимость проверить наличие возможных проблем. Ошибки, сообщения о которых не отображаются, могут впоследствии вызвать затруднения при отладке страницы во время ее выполнения.
Чтобы этого избежать, следует включить трассировку предупреждений, задав для параметра @trace или @trace\_warnings значение true. При возникновении проблем, связанных с объектом сценария, все сведения будут отображаться на странице в следующем формате:
WARNING TRACE:
FILE: recordset.asp
FUNCTION: Recordset1.open()
DESCRIPTION: Recordset is already open.
См. также
Задачи
Практическое руководство. Включение отладки сценариев в обозревателе Internet Explorer
Основные понятия
Основные сведения об обработке сценариев ASP