Отладка приложений с помощью IntelliTrace

четверг, 29 апреля 2010, Александр Краковецкий

Автор оригинального текстаJustin Marks (Джастин Маркс)

Как вы обычно исправляете ошибки в коде? Наверное, вы ставите несколько точек остановок (breakpoints), запускаете программу в режиме отладки и делаете небольшие шаги до тех пор, пока не получите ошибку?

В отличие от других средств мониторинга и трасировки, таких как Process Monitor от Windows Sysinternals, Visual Studio 2010 собирает данные о приложении в процессе выполнения для того, чтобы помочь разработчикам отловить пробемы. Эти данные собираются в процесе событий иструмента IntelliTrace. Эти события являются частью процесса отладки и, в дополнение к другим средствам, позволяет разработчикам вернуться назад и посмотреть, что происходило в приложении без перезапуска отладчика.

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

Когда команда диагностики Visual Studio начала планировать Visual Studio 2010, было потрачено огромное количество времени на общение с заказчиками о том, как они диагностирую проблемы в своих приложениях. Так как каждый заказчик имел различные шаблоны и набор утилит стало ясно, что традиционные методы диагностирования проблем сложны, требуют большого количества времени и денег. Отчеты с ошибками, которые получают разработчики, почти всегда не содержат нужной информации о том, как воспроизвести проблему, и, часто, содержат формулировки такого типа: "я использовал программу и она упала". В редких случаях вы можете столкнуться с проблемами, специфичными для конкретной среды и настроек пользователя, что приводит к новым проблемам. Кроме того, ошибки часто возникают из-за недопонимания того, как работает фреймворк или как работает какой-то код.

Руководствуясь этими проблемы, было принято решение разработать новый иструмент для отладки, который собирал бы информацию о приложении во время отладки. Задачей стояло предоставить разработчикам  информацию о конкретных шагах и настройках стреды, а также особенности поведения кода в среде, в которой выполняется приложение для повышения производительности при отладки.

Встречайте, IntelliTrace!

Когда разработчику необходима полная информация о процессе выполнения кода, IntelliTrace предлагает включить запись и собрать полную историю выполнения приложения.

Для иллюстрации будем использовать демо приложение "Tailspin Toys". Для начала, откроем проект в Visual Studio и запустим отладку. Когда веб-сайт загрузился, переходим на страницу "About us" и получаем ошибку. Как бы вы провели диагностику проблемы? Наверняка, открыли бы web.config файл, сконфигурировали бы его так, чтобы показывались ошики и перезапустили бы отладчик. Но если проблема не однозначная? Было бы замечательно остановить процесс сразу после того, как произошла ошибка, и получить историю событий в Visual Studio.

Когда вы отлаживаете приложения, IntelliTrace собирает в фоновом режиме данные о нем, включая информацию от многих фреймворков, например, ADO.NET, ASP.NET и System.XML. Эти события в IntelliTrace позволяют разработчику увидеть, что произошло ранее в процесе выполнения, и, что самое главное, вернуться назад во времени для того, чтобы увидеть предыдущие состояния приложения без необходимости перезапускать отладчик. Когда мы проваливаемся в точку остановки, мы сразу же получаем полный список событий IntelliTrace, которые были собраны (рисунок 1).

Рисунок 1. Диагностическая информация, собранная IntelliTrace

Было определено около 150 событий IntelliTrace для Visual Studio 2010 и планируется в скором времени пополнять этот список новыми событиями. Ниже в таблице собрана информация о некоторых категориях событий.

События IntelliTrace для Microsoft .NET Framework

Категория Описание событий и собираемых данных
ADO.NET SQL-запросы, команды и строки подлючения (connection string).
ASP.NET Посылаемые на сервер запросы, переадресация.
Console Вывод в консоль.
Data Binding Привязка данных в Windows Forms.
Environment Variables Оценка и получение с процесса переменных среды.
File Создание, удаление и доступ к файлам.
Gestures События, создаваемые пользователем при работе с элементами управления Web forms, Windows Forms и WPF.
Lazy Initialization Инициализация "ленивых" переменных.
Registry Создание, удаление и доступ к данным реестра.
Service Model Вызовы сервисов с помошью WCF.
Threading Очередь пользовательских задач и параллельных задач.
Tracing Вывод сообщений трасировки и ассерты.
User Prompt Отображение окон с сообщениями в Windows Forms и WPF приложениях.
Workflow Создание и выполнение активностей.
XML Загрузка XML файлов.

Окно IntelliTrace позволяет отфильтровать список собранных событий по категориях (см. таблицу) или по потокам. Также доступен поиск событий по ключевым словам, с помощью которого можно быстро перейти к нужному событию. Так как IntelliTrace также собирает информацию об исключениях, можно сделать поиск по ключевому слову "exception" и получить информацию об ASP.NET исключении, а также информацию, где оно было вызвано и поймано. В данном случае исключение имеет тип XMLException и было вызвано в результате разбора файла в десятой строке и в позиции 53 (рисунок 2). Когда мы нажимаем на событие, которое вызвало исключение, то другие окна, такие как Call Stack и Watch, показывают соответствующую информацию. Также редактор подстветит соответствующий код, который соответствует событию IntelliTrace.

Рисунок 2. XMLException разбора файла в строчке 10 и позиции 53

IntelliTrace показал мне очень важную информацию для диагностики проблемы: XML файл был загружен и какой-то символ был неожиданным или некорректным. Но я до сих пор не знаю, какой файл обрабатывался. Но, повторюсь, IntelliTrace собрал всю информацию, в том числе информацию о конкретном файле.

Посмотрим еще раз на рисунок 2, где можно увидеть событие перед исключением, которое отображает событие загрузки XML файла "Content\Xml\Ads.xml". Это должен быть файл, который вызвал ошибку. Откроем этот файл в Visual Studio. Если посмотреть на десятую строчку в позицию 53, то можно увидеть недопустимую строку "&b=1". Путем удаления недопустимого символа проблема с разбором файла исчезает и сайт теперь загружается нормально.

В этом и заключается главное преимущество IntelliTrace - он дает больше информации для диагностики проблем, что позволяет сделать процесс отладки более быстрым и проще. У вас остается больше времени для реализации более важных задач, а не поиска источника проблемы.

Использование IntelliTrace для отслеживания событий отладчика

Мы увидели, как IntelliTrace собирает исключения (обработанные и необработанные) и как события IntelliTrace помогают отследить какой из фреймворков (потоков, фалов) вызвал проблему. Но это еще не все. IntelliTrace также собирает события от отладчика (точки остановки или breakpoints), точки трассировки (tracepoints) и шаги отладки.

Одна из распространенных техник отладки приложения заключается в том, чтобы поставить точку остановки возле точки, где скорее всего произойдет исключение и дальше и потом пошагово отслеживать состояние системы. Это также актуально для отладки внутри циклов. К сожалению, разработчикам очень хочется побыстрее найти проблему и они быстро начинают жать F10 и потом через некоторое время понимают, что зашли далеко. Они запускают приложение и начинают все сначала. С помоью IntelliTrace все точки остановки и шаги записываются вместе со всей необходимой информацией, поэтому вы можете очень быстро перейти на необходимый шаг.

Если нажать на одно из этих событий, то окно Watch покажет все данные, за которыми мы следили, включая значения в окнах Locals, Watch, Autos, QuickWhatch и DataTips.

Часто, написанный и опубликованный ранее код не содержит необходимый уровень отслеживания событий для отладки проблем, которые могут возникнуть. В таких случаях используют точки остановки для того, чтобы увидеть, что происходит внутри приложения. Но зачастую разработчикам не нужно останавливаться на точках остановки, а нужно собрать некоторую информацию и продолжить выполнение. Это особенно актуально для циклов, когда нужно записать значения переменных на каждой итерации без необходимости останавливаться каждый раз. В таких случаях точки трассировки являются хорошим альтернативным решением. Точки трассировки позволяют разработчику сообщить отладчику выполнить некоторое действие, вывести значение вместо того, чтобы останавливать выполнение программы. С помощью Intellirace все точки трассировки собираются и их можно посмотреть как и любое другое событие в окне IntelliTrace (рисунок 3).

Рисунок 3. Точки трассировки могут автоматически добавлять отладочные сообщения в код

Включаем запись

По умолчанию IntelliTrace настроен для сбора только событий IntelliTrace. Это хорошое решение в большинсве случаев, но оно не позволяет записывает всю историю выполнения вашего приложения. Если вам необходимо больше информации, то необходимо настроить IntelliTrace соответствующим образом. Как и другие инструменты отладки, IntelliTrace можно настроить с помощью окна Options из меню Tools (рисунок 4).

Рисунок 4. Настройки IntelliTrace могут быть изменены в диалоге Options 

Выбирая "IntelliTrace events and call information",  можно настроить IntelliTrace так, чтобы он собирал не только родные события, но и информацию о входах, выходах из методов, входные и выходные значения этих методов. Ваше решение собирать больше информации означает, что вы можете получить гораздо больше информации, чем вы нуждаетесь. Команда разработчиков пыталась найти баланс между количеством собираемой информации и производительностью, но разработчик имеет полный контроль и сам может выбрать необходимый уровень.

Каждая сессия отладки создает IntelliTrace файл на диске, который автоматически удаляется при закрытии Visual Studo. В закладке Advanced в окне Options можно задать настройки таким образом, что файл не будет удаляться с диска, а также настроить максимальный размер этого файла. Если размер файла будет превышен, то информация будет сжата или обрезана.

По причине производительности только несколько типов событий автоматически собираются IntelliTrace. Но вы можете включить слежение за выводом в консоль, доступом к файлам, ленивыми инициализациями, регистром и потоками. Это можно сделать в панели Events в окне Options.

Последняя панель окна Optons позволяет настроить перечень модулей, которые будут отслеживаться IntelliTrace. Все модули, кроме тех, что поставляются Microsoft как часть .NET Framework и Visual Studio, собираются по умолчанию. Вы можете настроить те модули, которые считаете нужными. Также вы можете исключить библиотеки третих сторох, так как они находятся вне вашего контроля.

Продолжение следует...

Скачать тестовый проект

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии