Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта статья связана с .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Трассировка — это способ контроля работы вашего приложения во время его выполнения. Вы можете добавить инструментирование трассировки и отладки в приложение .NET Framework при его разработке, и вы можете использовать это инструментирование как во время разработки приложения, так и после его развертывания. Вы можете использовать System.Diagnostics.Trace, System.Diagnostics.Debug классы и System.Diagnostics.TraceSource классы для записи сведений об ошибках и выполнении приложения в журналах, текстовых файлах или других устройствах для последующего анализа.
Термин инструментации относится к способности наблюдать или измерять уровень производительности продукта, а также диагностировать ошибки. В программировании это означает способность приложения включать в себя:
Трассировка кода — получение информационных сообщений о выполнении приложения во время выполнения.
Отладка — отслеживание ошибок программирования и исправление ошибок программирования в приложении в процессе разработки. Дополнительные сведения см. в разделе "Отладка".
Счетчики производительности — компоненты, позволяющие отслеживать производительность приложения. Дополнительные сведения см. в статье Performance Counters.
Журналы событий — компоненты , позволяющие получать и отслеживать основные события в выполнении приложения. Дополнительные сведения см. в EventLog классе.
Инструментирование приложения путем размещения инструкций трассировки в стратегических расположениях в коде особенно полезно для распределенных приложений. С помощью инструкций трассировки можно инструментировать приложение не только для отображения сведений, когда происходит ошибка, но и для отслеживания того, насколько хорошо работает приложение.
Класс TraceSource предоставляет расширенные функции трассировки и может использоваться вместо статических методов старых Trace и Debug трассировок классов. Знакомые Trace и Debug классы по-прежнему широко используются, но TraceSource класс рекомендуется для новых команд трассировки, таких как TraceEvent и TraceData.
Классы Trace и Debug идентичны, за исключением того, что процедуры и функции класса Trace компилируются по умолчанию в сборки на выпуск, тогда как процедуры и функции класса Debug не компилируются.
Классы Trace и Debug предоставляют средства для мониторинга и анализа производительности приложений как во время разработки, так и после развертывания. Например, класс можно использовать Trace для отслеживания определенных типов действий в развернутом приложении по мере их возникновения (например, создания новых подключений к базе данных) и, следовательно, мониторинга эффективности приложения.
Трассировка кода и отладка
Во время разработки можно использовать выходные методы Debug класса для отображения сообщений в окне вывода интегрированной среды разработки Visual Studio (IDE). Рассмотрим пример.
Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");
Каждый из этих примеров будет отображать "Hello World!" в окне вывода при запуске приложения в отладчике.
Это позволяет выполнять отладку приложений и оптимизировать их производительность на основе их поведения в тестовой среде. Вы можете выполнить отладку приложения в сборке отладки с включенным условным атрибутом Debug , чтобы получить все выходные данные отладки. Когда приложение готово к выпуску, можно скомпилировать сборку выпуска без включения условного Debug атрибута, чтобы компилятор не включал код отладки в окончательный исполняемый файл. Дополнительные сведения см. в разделе "Компиляция условно с использованием трассировки и отладки". Дополнительные сведения о различных конфигурациях сборки для приложения см. в разделе "Компиляция и сборка".
Вы также можете отслеживать выполнение кода в установленном приложении, используя методы Trace класса. Процессом и масштабом трассировки можно управлять. Для этого добавьте в код переключатели трассировки. Это позволяет отслеживать состояние приложения в рабочей среде. Это особенно важно в бизнес-приложении, использующее несколько компонентов, работающих на нескольких компьютерах. Вы можете управлять тем, как коммутаторы используются после развертывания с помощью файла конфигурации. Дополнительные сведения см. в разделе "Практическое руководство. Создание, инициализация и настройка коммутаторов трассировки".
При разработке приложения, для которого планируется использовать трассировку, обычно в код приложения включаются как трассировочные, так и отладочные сообщения. Когда вы будете готовы к развертыванию приложения, можно скомпилировать финальную сборку без включения условного атрибута Debug. Однако можно включить условный атрибут Trace, чтобы компилятор включил код трассировки в исполняемый файл. Дополнительные сведения см. в разделе "Компиляция условно с использованием трассировки и отладки".
Этапы трассировки кода
Существует три этапа трассировки кода:
Инструментирование — вы добавляете код трассировки в приложение.
Трассировка — код трассировки записывает сведения в указанный целевой объект.
Анализ — вы оцениваете информацию трассировки для выявления и понимания проблем в приложении.
Во время разработки все методы отладки и трассировки выходных данных записывают сведения в окно вывода в Visual Studio по умолчанию. В развернутом приложении методы записывают сведения трассировки в указанные целевые объекты. Дополнительные сведения об указании целевого объекта вывода для трассировки или отладки см. в разделе "Прослушиватели трассировки".
Ниже приведены общие сведения о основных шагах, которые обычно участвуют в использовании трассировки для анализа и исправления потенциальных проблем в развернутых приложениях. Дополнительные сведения о выполнении этих действий см. в соответствующей ссылке.
Использование трассировки в приложении
Рассмотрим, какие выходные данные трассировки необходимо получить на сайте после развертывания приложения.
Создайте набор коммутаторов. Дополнительные сведения см. в статье How to: Configure Trace Switches (Настройка переключателей трассировки).
Добавьте инструкции трассировки в код приложения.
Определите место отображения выходных данных трассировки и добавьте соответствующие прослушиватели. Дополнительные сведения см. в разделе "Создание и инициализация прослушивателей трассировки".
Протестируйте и отладите приложение и код трассировки, который он содержит.
Скомпилируйте приложение в исполняемый код с помощью одной из следующих процедур:
Используйте меню "Сборка " вместе со страницей отладки диалогового окна "Страницы свойств " в обозревателе решений. Используйте это при компиляции в Visual Studio.
-или-
Используйте директивы компилятора trace и debug для метода компиляции командной строки. Дополнительные сведения см. в разделе Компиляция условно с помощью трассировки и отладки. Используйте это при компиляции из командной строки.
Если проблема возникает во время выполнения, включите соответствующий переключатель трассировки. Дополнительные сведения см. в разделе "Настройка коммутаторов трассировки".
Код трассировки записывает сообщения трассировки в указанный целевой объект, например экран, текстовый файл или журнал событий. Тип прослушивателя, который вы включили в Trace.Listeners коллекцию, определяет целевой объект.
Проанализируйте сообщения трассировки, чтобы выявить и понять проблему в приложении.
Инструментирование выполнения трассировки и распределенные приложения
При создании распределенного приложения может оказаться трудно протестировать приложение таким образом, как оно будет использоваться. Несколько команд разработчиков могут протестировать все возможные сочетания операционных систем или веб-браузеров (включая все локализованные языковые параметры) или имитировать большое количество пользователей, которые будут получать доступ к приложению одновременно. В этих обстоятельствах невозможно проверить, как распределенное приложение будет реагировать на большие объемы, различные настройки и уникальное поведение конечных пользователей. Кроме того, многие части распределенного приложения не имеют пользовательского интерфейса, с которым можно взаимодействовать напрямую или просматривать действия этих частей.
Однако вы можете компенсировать это, позволяя распределенным приложениям описывать определенные события, интересующие администраторов системы, особенно когда что-то идет не так, внедряя средства диагностики в приложение, то есть путем размещения трассировочных инструкций в стратегических местах в коде. Затем, если во время выполнения возникает что-то неожиданное (например, чрезмерно медленное время отклика), можно определить причину.
С помощью инструкций трассировки можно избежать сложной задачи изучения исходного исходного кода, изменения его, перекомпиляции и попытки создать ошибку во время выполнения в среде отладки. Помните, что вы можете инструментировать приложение не только для отображения ошибок, но и для мониторинга производительности.
Стратегическое размещение инструкций трассировки
При размещении инструкций трассировки для использования во время выполнения необходимо особое внимание. Необходимо учитывать, какие сведения трассировки могут потребоваться в развернутом приложении, чтобы все вероятные сценарии трассировки были достаточно охвачены. Тем не менее, так как приложения, использующие трассировку, отличаются широко, общие рекомендации по стратегическому размещению трассировки отсутствуют. Дополнительные сведения о размещении инструкций трассировки см. в статье "Практическое руководство. Добавление инструкций трассировки в код приложения".
Выходные данные трассировки
Выходные данные трассировки собираются объектами, называемыми прослушивателями. Прослушиватель — это объект, который получает результаты трассировки и записывает их на выходное устройство (обычно окно, журнал или текстовый файл). Когда создаётся прослушиватель трассировки, его обычно добавляют в коллекцию Trace.Listeners, что позволяет прослушивателю получать все результаты трассировки.
Информация трассировки всегда записывается по крайней мере в целевой объект вывода по умолчанию Trace, DefaultTraceListener. Если по какой-то причине вы удалили DefaultTraceListener, не добавив других слушателей в сборку Listeners, вы не получите никаких сообщений логирования. Дополнительные сведения см. в разделе «Прослушиватели трассировки».
Debug Шесть элементов и Trace методов, которые записывают сведения трассировки, перечислены в следующей таблице.
Метод | Выходные данные |
---|---|
Assert |
Указанный текст; или, если не указано, стек вызовов. Выходные данные записываются только в том случае, если условие, указанное в качестве аргумента в инструкции Assert , равно false. |
Fail |
Указанный текст; или, если не указано, стек вызовов. |
Write |
Указанный текст. |
WriteIf |
Указанный текст, если условие, указанное в качестве аргумента в WriteIf инструкции, удовлетворяется. |
WriteLine |
Указанный текст и возврат каретки. |
WriteLineIf |
Указанный текст и возврат каретки, если условие, указанное в качестве аргумента в WriteLineIf инструкции, удовлетворяется. |
Все слушатели в коллекции получают сообщения, описанные выше в Listeners таблице, но действия могут отличаться в зависимости от типа слушателя, который получает сообщение. Например, DefaultTraceListener отображает диалоговое окно утверждения при получении Fail
или уведомления об ошибке Assert
, но TextWriterTraceListener просто записывает вывод в свой поток.
Вы можете создавать пользовательские результаты, реализуя собственный прослушиватель. Например, настраиваемый прослушиватель трассировки может отображать сообщения в поле сообщения или подключаться к базе данных для добавления сообщений в таблицу. Все пользовательские прослушиватели должны поддерживать шесть описанных выше методов. Дополнительные сведения о создании определяемых разработчиком прослушивателей см. TraceListener в справочнике по .NET Framework.
Методы Write
и WriteLine
всегда записывают текст, который вы указываете.
Assert
, WriteIf
и WriteLineIf
требует логического аргумента, который определяет, пишет ли он указанный текст; они записывают указанный текст только в том случае, если выражение имеет значение true (для WriteIf
и WriteLineIf
), или false (для Assert
). Метод Fail
всегда записывает указанный текст. Дополнительные сведения см. в статье "Практическое руководство. Добавление инструкций трассировки в код приложения и справочник по .NET Framework".
Проблемы безопасности
Если вы не отключаете трассировку и отладку перед развертыванием приложения ASP.NET, ваше приложение может показать сведения о себе, которые могут быть использованы вредоносной программой. Дополнительные сведения см. в статьях Практическое руководство: Компиляция условно с помощью Trace и Debug, Компиляция и сборка, а также Практическое руководство: Создание, инициализация и настройка переключателей трассировки. Отладка также настраивается с помощью служб IIS.
См. также
- Trace
- TraceSource
- Контракты кода
- Типы проектов C#, F# и Visual Basic
- Как добавить инструкции трассировки в код приложения
- Практическое руководство. Условная компиляция с использованием атрибутов Trace и Debug
- Практическое руководство. Создание, инициализация и настройка коммутаторов трассировки
- Практическое руководство. Создание и инициализация источников трассировки
- Практическое руководство. Использование TraceSource и фильтров с прослушивателями трассировки
- Прослушиватели трассировки
- Переключатели трассировки