Любой, кто ранее разрабатывал веб-приложение с использованием ASP, должен знать, насколько трудна отладка веб-приложения. В ASP отладка является трудоемкой и обычно включает в себя печать значения переменной с помощью метода Response.Write(). Поэтому спросите себя: сколько раз вы забывали удалить инструкции отладки перед развертыванием приложения?
Эта ситуация полностью изменилась с появлением компонентов .NET Framework. В .NET вы можете отслеживать выполнение всего веб-приложения с помощью отладчика в Visual Studio .NET или с помощью класса Trace в пространстве имен System.Web.TraceContext. В этой статье показано, как использовать класс Trace для облегчения работы по отладке.
Использование класса Trace
ASP.NET включает класс Trace, который помогает отслеживать поток информации приложения. Вместо использования объекта Response для отладки теперь вы можете использовать класс Trace для вывода отладочной информации.
Чтобы продемонстрировать его использование, мы сначала создадим веб-приложение ASP.NET и разместим кнопку и элемент управления ListBox в стандартной WebForm1 (как показано на рисунке 1). Заполните элемент управления ListBox тремя элементами и присвойте его свойству AutoPostBack значение True.
Рисунок 1. Заполнение стандартной формы WebForm1. |
В этой статье я хочу проследить ход выполнения моего приложения. Сначала активируйте отслеживание. Инструкция страницы должна содержать атрибут Trace, а его значение должно быть установлено в True (переключиться в режим просмотра исходного кода HTML), как показано на рисунке 2.
Рисунок 2. Отслеживание активации |
Затем я вставляю оператор Trace в событие загрузки формы, чтобы знать, произошла ли обратная передача. Событие PostBack — одна из самых запутанных функций ASP.NET, которая часто приводит к сбоям у разработчиков, впервые использующих ASP.NET.
Частная подстраница_Load (отправитель ByVal As System.Object, _ ByVal e As System.EventArgs) _ Обрабатывает MyBase.Load 'Поместите сюда пользовательский код для инициализации страницы Trace.Write("Страница загружена") Если не IsPostBack, тогда Trace.Write("Нет в постбэке") 'Выполнить некоторые операции при возникновении обратной передачиElse Trace.Write("В постбэке") 'Выполняем некоторые операцииEnd If Конец субтитра |
Я также хотел бы знать, происходит ли обратная передача при выборе элемента ListBox:
Частный дополнительный ListBox1_SelectedIndexChanged (отправитель ByVal As _ Система.Объект, _ ByVal e As System.EventArgs) Обрабатывает _ ListBox1.SelectedIndexChanged Trace.Write("Обратная передача списка") Конец субтитра |
Когда вышеуказанное приложение ASP.NET запустится, отобразится следующий вывод (показанный на рисунке 3):
Рисунок 3. Отображение информации отслеживания |
Вы можете заметить, что при первой загрузке WebForm1 вы можете увидеть строки «Страница загружена» и «Не в обратной передаче». Если вы нажмете кнопку на WebForm1, вы увидите запись, показанную на рисунке 4. Аналогичным образом, если щелкнуть ListBox, также будет отображена строка «Postback Listbox».
Рисунок 4. Проверка информации трассировки |
Страница отслеживания содержит следующие разделы (на рисунке 3 показана не вся информация):
Раздел | Описание |
Сведения о запросе | Описывает информацию, связанную с запросом, например идентификатор диалога, кодировку и время запроса. |
Информация трассировки | содержит сведения о запущенных в данный момент приложениях. Информация об отслеживании отображается в этом разделе. |
Дерево элементов управления | отображает информацию об элементах управления на странице и размере скрытых полей Viewstate. |
Коллекция файлов cookie | отображает файлы cookie, установленные страницей, и их значения. |
Коллекция заголовков | отображает информацию HTTP-заголовка, такую как длина контента и пользовательский агент. |
Коллекция Forms | отображает имена элементов управления на странице и их значения. |
Переменные сервера | отображают переменные среды на стороне сервера. |
Обратите внимание, что наша информация об отслеживании отображается под разделом «Информация об отслеживании». Если вы хотите отключить трассировку, просто установите для атрибута Trace в директиве страницы значение False. Нет необходимости удалять инструкции трассировки из вашего приложения: отключить отладку теперь так же просто, как установить логическое значение.
Включение и выключение трассировки — это просто вопрос изменения значения атрибута Trace в директиве страницы. Вы также можете отключить трассировку программно с помощью класса Trace. Членами класса Trace являются следующие:
Описание | свойства |
IsEnabled | указывает, активировать ли отслеживание текущего запроса. |
TraceMode | устанавливает режим трассировки: sortByCategory или sortByTime. |
Метод | Описание |
Предупреждение | отображает информацию трассировки красным цветом. |
Запишите | информацию трассировки. |
Чтобы программно отключить отслеживание, используйте следующий оператор в событии загрузки WebForm1:
Трассировка.IsEnabled = ложь |
В нашем случае информация отслеживания не отображается на видном месте, поэтому она скрыта под другой информацией отслеживания. Метод Warn() класса Trace может печатать информацию трассировки красным цветом. Поэтому вместо того, чтобы писать такой код:
Trace.Write("Страница загружена") |
Вместо:
Trace.Warn("Страница загружена") |
На рис. 5 показана отладочная информация, выделенная красным цветом для метода Warn().
Рис. 5. Использование метода Warn() для отображения информации трассировки красным цветом. |
Сортировка информации отслеживания
Размещение нескольких операторов трассировки в приложении иногда может привести к загромождению. Отслеживать будет проще, если информацию об отслеживании можно разделить на разные категории. Класс Trace позволяет нам классифицировать и сортировать информацию трассировки по категориям.
В следующем примере показано, как сгруппировать информацию отслеживания по категориям:
Частная подстраница_Load (отправитель ByVal As System.Object, _ ByVal e As System.EventArgs) _ Обрабатывает MyBase.Load Trace.TraceMode = TraceMode.SortByCategory 'Поместите сюда пользовательский код для инициализации страницы Trace.Warn("Page_Load", "Страница загружена") Если не IsPostBack, тогда 'Выполняем некоторые операции Trace.Warn("Page_Load", "Не в постбэке") Еще Trace.Warn("Page_Load", "В постбэке") Конец, если Конец субтитра
Частный дополнительный ListBox1_SelectedIndexChanged (отправитель ByVal _ Как System.Object, ByVal и As _ System.EventArgs) Обрабатывает _ ListBox1.SelectedIndexChanged Trace.Warn("ListBox", "Обратная передача списка") Конец субтитра |
При выполнении этого примера будет отображаться следующая отладочная информация, сгруппированная по категориям (показано на рис. 6):
Рисунок 6. Сортировка по категориям |
Давайте проанализируем приведенный выше код:
Trace.TraceMode = TraceMode.SortByCategory |
Свойство TraceMode устанавливает режимы, поддерживаемые трассировкой:
· SortByCategory: сортировка информации отслеживания по типу.
· SortByTime: отображение информации трассировки в соответствии с порядком выполнения.
Поскольку мы выбрали режим сортировки по категориям, на рисунке 7 показана информация, отсортированная по категориям.
Trace.Warn("Page_Load", "Страница загружена") |
Атрибут Warn отображает сообщение красным цветом. Обратите внимание, что это перегруженный метод. В примере мы передаем ему два параметра. Первая категория ввода (Category), второй параметр — получение сообщения (Message).
Помимо установки режима трассировки с помощью класса Trace, вы также можете указать режим трассировки с помощью директив страницы:
<%@ Page Language="vb" Trace="true" TraceMode="SortByCategory" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> |
Трассировка приложения
В последнем разделе обсуждается отслеживание страниц, которое отслеживает поток информации о выполнении внутри страницы. ASP.NET также поддерживает трассировку на уровне приложения. Трассировка на уровне приложения задается в файле web.config в разделе трассировки:
Чтобы активировать трассировку на уровне приложения, установите следующие значения:
Значение | свойства | Описание |
Enabled | True | Активирует или отключает трассировку на уровне приложения. |
requestLimit | 10 | устанавливает максимальное количество запросов для отслеживания. |
pageOutput | False | отображает информацию об отслеживании в конце страницы. |
TraceMode | sortByTime | — метод сортировки трассировочной информации. |
localOnly | True | устанавливает возможность просмотра следов браузера на нелокальных компьютерах. |
При загрузке приложения информация об отслеживании не отображается на странице. Чтобы просмотреть информацию трассировки, нам нужно использовать средство просмотра трассировки (trace.axd):
Рисунок 7. Трассировка на уровне приложения |
На рис. 7 показана информация трассировки последних шести запросов приложения. Чтобы просмотреть подробную информацию о каждом запросе, нажмите ссылку «Просмотреть подробности» для каждой строки.
Обратите внимание: если в файле web.config для трассировки установлено значение true, а в директиве страницы установлено значение false, трассировка будет отключена.
Подвести итог
ASP.NET значительно упрощает отладку веб-приложений. Теперь, когда вы знаете, как использовать отслеживание, попробуйте и посмотрите, насколько оно повысит вашу производительность!