IntelliTrace

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

Джастин Маркс

Загрузка образца кода

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

Мы занимаемся отладкой в таком стиле со времен построения ЭВМ «ENIAC». Этот утомительный и отнимающий много времени подход к отладке верно служил нам долгие десятилетия, но настала пора упростить отладку. С выпуском Visual Studio 2010 Ultimate новый инструмент IntelliTrace наконец-то переносит нас к отладке 21-го века, предоставляя гораздо более глубокое и четкое видение того, как выполняются наши приложения.

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

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

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

Учитывая все эти болевые точки, мы решили создать новый отладчик, который умел бы собирать все необходимую информацию на момент возникновения проблемы. Нашей целью было предоставить разработчикам точные описания, обеспечивающие воспроизведение проблем, параметры системной среды и детализацию поведения используемых ими инфраструктур и кода, чтобы радикально улучшить возможности диагностики. С выпуском Visual Studio 2010 Ultimate инструмент In­telliTrace обеспечит гораздо более эффективную диагностику за счет более полной картины того, как ведут себя приложение и инфраструктура, а также возможности открытия файла IntelliTrace, собранного тестировщиком, что позволит исключить ситуации, когда разработчик не может воспроизвести проблему.

Знакомство с IntelliTrace

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

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

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

image: Diagnostic Information Collected by IntelliTrace

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

Как видно из рис. 1, список событий IntelliTrace выходит далеко за рамки перечня обращений к файлам и реестру, которые вы обнаружили бы в Process Monitor. Мы определили почти 150 событий IntelliTrace для Visual Studio 2010 и планируем со временем расширить этот список. На рис. 2 приведены некоторые категории событий, собираемых IntelliTrace.

Рис. 2 События IntelliTrace доступны во всей Microsoft .NET Framework

Категория Описание и собираемые данные
ADO.NET События, связанные с выполнением запросов к SQL, исполняемой командой и строкой подключения
ASP.NET События, связанные с конвейером 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-форм и информационных сообщений WPF, а также результатов диалога
Workflow Создание экземпляров и выполнение
XML Загрузка XML-файлов

Окно IntelliTrace позволяет фильтровать список собранных событий по категории (эти категории перечислены на рис. 2) или по потоку. Кроме того, можно выполнять текстовый поиск ключевых событий и быстро переходить к ним. Поскольку IntelliTrace также собирает исключения, можно искать по слову «exception», и список будет фильтроваться по исключениям; в данном случае я увижу исключение, вызвавшее ошибку в странице ASP.NET, — место его генерации и точку захвата. Здесь ошибка вызвана исключением XMLException при разборе сущности на строке 10 в позиции 53 (рис. 3). Если я щелкну событие сгенерированного исключения, в других окнах отладчика, таких как Call Stack и Watch, будут показаны данные, относящиеся к самому событию, поэтому все будет выглядеть так, будто вы выполняли отладку в момент генерации исключения. Вдобавок редактор откроет файл исходного кода и выделит строку кода, соответствующую событию, оранжевым цветом.

image: An XMLException Was Thrown While Parsing an Entity on Line 10, Position 53

Рис. 3 XMLException было сгенерировано при разборе сущности в строке 10, позиции 53

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

Снова посмотрев в окно IntelliTrace (рис. 3), я вижу, что событие перед самым исключением — загрузка XML-файла Content\\Xml\\Ads.xml. Это и есть файл, который вызвал ошибку. Я могу легко открыть этот файл в Visual Studio. Смотрим на строку 10, позицию 53 и видим, что в этом файле действительно есть ошибка:«&b=1» недопустимо для XML-элемента NavigateUrl. После удаления этих символов веб-сайт должен загружаться корректно.

А теперь я хочу, чтобы вы задумались, как вы действовали бы в этом случае при традиционной отладке. Вы могли бы узнать, где произошло исключение, но совершенно точно у вас не было никакого способа точно выяснить его причину. И в этом главный смысл Intelli­Trace — этот инструмент ускоряет и облегчает диагностику проблем, давая вам более полную и качественную информацию. Вам и так есть чем заняться вместо того, чтобы тратить свое время на добывание всей этой информации по крупицам.

Применение IntelliTrace для отслеживания событий отладчика

Я только что показал вам, как IntelliTrace собирает исключения (и обрабатываемые, и необрабатываемые), которые происходят при выполнении приложения, и как события IntelliTrace, охватывающие всю инфраструктуру, способны дать полное представление о том, что делает приложение «за кулисами». Но это еще не все. IntelliTrace также собирает события, вызываемые отладчиком, а именно:события, относящиеся к точкам прерывания, точкам трассировки и пошаговому выполнению.

Один из наиболее распространенных методов отладки — установка точки прерывания (останова) рядом с точкой, где на ваш взгляд присутствует проблема, с последующим пошаговым выполнением кода и наблюдением за изменением значений переменных. Этот метод особенно полезен при отладке циклов, когда нужно следить за достижением определенного значения в переменной. Увы, многие разработчики проявляют нетерпение и жмут на клавишу F10 для быстрого пошагового прохода кода, но в итоге обнаруживают, что из-за этого она «прошагали» мимо проблемы. Тогда им приходится перезапускать свой сеанс отладки и начинать все сначала. При использовании IntelliTrace все точки прерывания и события пошагового выполнения записываются вместе с контекстными для них данными, поэтому вы можете быстро переходить к точкам, где вы ранее остановились.

Если я щелкну одно из этих событий отладчика, окно Watch покажет мне все данные, на которые я уже смотрел, в том числе проверявшиеся значения переменных в окнах Locals, Watch и Autos windows, а также QuickWatch и DataTips.

Зачастую ранее разработанный и развернутый код не содержит необходимых встроенных средств трассировки, помогающих отлаживать потенциально возможные проблемы. Точки прерывания позволяют в большей мере выяснять, что происходит «под капотом» приложения. Но во многих случаях разработчикам не нужно останавливать приложение в точках прерывания — им скорее требуется собрать некие данные и продолжить выполнение. Это особенно относится к содержимому циклов, где нужно записать значение итератора, не останавливаясь на каждой итерации. В таких случаях отличной альтернативой являются точки трассировки (tracepoints). Они заставляют отладчик выполнить заданное действие, например выполнить какой-то макрос или вывести трассировочное сообщение, а не прерывать выполнение. IntelliTrace собирает вывод от точек трассировки, и его можно просмотреть в том же интерфейсе, что и остальные события IntelliTrace (рис. 4).

image: Tracepoints Can Dynamically Add Trace Outputs to Code

Рис. 4 Точки трассировки позволяют динамически добавлять трассировочный вывод в код

Настройка детализации

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

image: IntelliTrace Settings Can Be Changed from the Options Dialog

Рис. 5 Параметры IntelliTrace можно менять в диалоге Options

Выбрав «IntelliTrace events and call information», вы настроите IntelliTrace на сбор не только событий IntelliTrace, но и информации о вызовах при каждом входе и выходе в метод, а также о параметрах и возвращаемых значениях в этих участках. К сожалению, включение этого режима приводит к отключению функционала Edit-and-continue (возобновление выполнения после правки) в ходе сеанса отладки. Очевидно, что этот выбор приведет к более высоким издержкам для вашего приложения. Мы очень упорно трудились над тем, чтобы найти баланс между объемом полезной информации и производительностью, и тем не менее предоставляем вам полную свободу в настройке.

В каждом сеансе отладки создается файл IntelliTrace, который сохраняется на диск и автоматически очищается при закрытии Visual Studio. Панель IntelliTrace Advanced, доступная через диалог Options, позволяет настроить, где должны создаваться и храниться файлы при отладке и насколько велики они могут быть. По достижении максимального размера файла используется круговой буфер, помогающий сжимать и обрезать информацию, хранящуюся в журнале IntelliTrace, тем самым уменьшая размер файла журнала на диске. Два других параметра на панели Advanced дают возможность скрывать навигационную начинку и отключать поиск доступных символов Team Foundation Server (TFS).

Из-за проблем с производительностью по умолчанию осуществляется сбор лишь подмножества событий, определенных в IntelliTrace. Некоторые из событий, которые вам, весьма вероятно, понадобится включить, — консольный вывод, обращения к файлам, «ленивая» (отложенная) инициализация, доступ к реестру и события, связанные с потоками. Вы можете включать/отключать целую категорию событий или индивидуальные события на панели IntelliTrace Events в диалоге Options.

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

Исследование ошибки в пользовательском коде

Теперь, когда я добился корректной работы страницы «About us» в демонстрационном приложении, давайте проверим, правильно ли работает корзина покупателя. Добавляя бумажный самолетик в корзину для покупки, я вижу, что товар и в самом деле оказался в корзине. Однако, когда я повторяю это действие, чтобы добавить второй экземпляр товара в корзину, его количество остается равным 1, хотя, естественно, должно быть 2. Я хотел бы использовать отладчик для решения проблемы без его перезапуска, но список событий Intelli­Trace скорее всего не поможет в этой ситуации (вся работа выполняется в моем коде, а не в .NET Framework). Вот здесь-то режим «IntelliTrace events and call information» и поможет мне увидеть историю выполнения приложения. Давайте переключимся в отладчик и посмотрим, какие дополнительные средства Intelli­Trace можно задействовать для решения возникшей проблемы.

Я начинаю с предположения, что ошибка кроется где-то в логике «Add Item to Cart». Поскольку это MVC-приложение (Model-View-Controller), обработчика события щелчка кнопки в нем нет, а есть сообщение POST, которое посылается и обрабатывается MVC. Это сообщение POST было записано как событие IntelliTrace, и, хотя само по себе оно не слишком полезно, я использую это событие как отправную точку в своем исследовании. Щелкнув это событие IntelliTrace, я попадаю в ту точку сеанса отладки, где начинается логика «Add Item». Я могу быстро найти эти сообщения POST по слову «POST» в окне IntelliTrace. Нажатие на кнопку осуществлялось дважды, поэтому, как и следовало ожидать, поиск возвращает два результата. После выбора второго события поле поиска очищается и мы видим контекст этого события (рис. 6).

image: The IntelliTrace Events View Can Help You Start Your Investigation

Рис. 6 Просмотр событий IntelliTrace помогает найти отправную точку в поиске причины проблемы

Теперь у меня есть контекст, показывающий, где я нахожусь во временном графике выполнения приложения, и я хочу копнуть поглубже и понять, какие методы вызывались. Из представления Events можно переключаться в другие представления, чтобы увидеть историю выполнения. Щелкнув ссылку Switch to IntelliTrace Calls View в верхней части окна, можно перейти в представление Calls и изучить полную историю выполнения приложения (рис. 7). При этом я могу в любой момент вернуться в представление Events, щелкнув ссылку Switch to IntelliTrace Events View.

image: The IntelliTrace Calls View Shows the Execution History of the Application

Рис. 7 Представление IntelliTrace Calls показывает историю выполнения приложения

Один из механизмов навигации по истории выполнения — использование представления Calls для перехода к вызовам, которые заинтересовали вас в процессе исследования. Всякий раз, когда вы дважды щелкаете вызов в нижней половине представления Calls, этот вызов выталкивается в нижнюю часть верхней половины представления, и регистр Instruction Pointer синхронизируется в редакторе кода с входной точкой вызываемого метода — точно так же, как и при активной отладке, когда вы проходите по стеку вызовов. Можно перемещаться по данным, собранным журналом IntelliTrace таким способом. Навигация через представление Calls — самый быстрый способ получить общее представление об истории выполнения и совершать дальние переходы по кодовой базе.

Но это лишь один из методов навигации. Можно, например, пошагово идти по коду. Внизу окна исходного кода расположен новый набор элементов управления в стиле DVR (DVD recorder), который позволяет пошагово проходить код, как в традиционном сеансе отладки (рис. 8). Так как я нахожусь в режиме отладки через IntelliTrace, пошаговый проход осуществляется по записанным событиям, происходившим на каждом участке вызова (callsite), входа в функцию и выхода из нее. Конечно, клавиши F10/F11 тоже работают, если вы предпочитаете использовать клавиатуру.

image: The Navigation Bar Offers DVR-Style Controls to Let You Step Through Your Application

Рис. 8 Навигационная панель предлагает элементы управления в стиле DVR, помогающие пошагово проходить по событиям в вашем приложении

Эти два метода навигации отлично подходят для исследования, но иногда вы точно знаете, где бы вы поставили точку прерывания. В случае этого приложения мне известно имя функции, где в корзину добавляется товар: Kona.Model.ShoppingCart::AddItem. Так что мне на самом деле нужно перейти ко второму вызову этой функции и проверить значения, передаваемые ей и возвращаемые из нее. Точнее, я хочу найти строку кода, откуда был вызов функции AdjustQuantity. Конечно, IntelliTrace поддерживает и такой вариант навигации.

В редакторе можно щелкнуть правой кнопкой мыши строку, к которой я хочу перейти, и выбрать из контекстного меню Search For This Line Collected By IntelliTrace (рис. 9). Начнется поиск, и результаты будут представлены в строке поиска вверху окна редактора, что позволит мне переключаться между результатами поиска. После синхронизации со вторым результатом поиска указатель команд будет указывать прямо на то место, где мне нужно оказаться, и я смогу изучить вызов, используя другие окна отладки (рис. 10).

image: The Search Functionality Lets You Jump Right to a Specific Function Call

Рис. 9 Функциональность поиска позволяет переходить прямо к конкретному вызову функции

image: Search Results Are Displayed in a Search Results Bar at the Top of the Editor Window

Рис. 10 Результаты поиска отображаются в строке вверху окна редактора

Взглянув в этот момент на содержимое окна Locals, вы заметите, что новое количество товара в корзине равно 1. Это ошибка; я ожидал, что оно будет равно 2. Смотрим на строку кода и видим, что в новом параметре Quantity нужно учитывать не только item.Quantity, но и переменную quantity, передаваемую функции при вызове. Для исправления изменяем вызов функции на:

AdjustQuantity(product, item.Quantity + quantity);

Исключение ситуаций, в которых разработчик не может воспроизвести проблему

Слишком часто тестировщики и разработчики занимаются танцами в стиле «no repro» («не воспроизводится»), когда тестировщик обнаруживает ошибку в одном из файлов, но в ответ получает комментарий «а на моем компьютере не воспроизводится». Ни разработчик, ни тестировщик не хотят участвовать в таком танце, но у них просто нет нужного набора инструментов, который помог бы им вместе увидеть, что произошло к моменту возникновения сбоя. Вот почему мы спроектировали систему так, чтобы та же самая диагностическая информация, предоставляемая IntelliTrace разработчику в ходе сеанса отладки, могла бы собираться и при выполнении тестов вручную через Microsoft Test Manager (MTM).

Давайте вернемся к первому сценарию отладки, где происходил сбой страницы «About us». Если тестировщик фиксирует эту ошибку, заголовок ее описания скорее всего будет примерно таким:«Ошибка приложения при просмотре страницы About». Ну и, если разработчику повезет, к описанию будет приложен экранный снимок, где видна ошибка. Что можно было бы сделать для отладки этой ошибки прежними средствами? Вероятно, вы загрузили бы решение из системы управления версиями и попытались бы воспроизвести проблему на своем компьютере. В этом случае вы смогли бы отладить проблему и устранить ошибку, но подумайте, сколько времени у вас ушло бы на это. А если бы проблема возникала из-за различий в конфигурациях вашего компьютера и компьютера тестировщика? Разработчики куда быстрее занимаются отладкой, нежели воспроизводят среды.

В Visual Studio 2010 инструмент MTM дает возможность тестировщикам создавать, контролировать и выполнять ручные и автоматизированные тесты. Но это отнюдь не все, что умеет делать этот инструмент. MTM предоставляет тестировщикам адаптеры диагностических данных для сбора информации в фоне — во время выполнения теста. Например, вы можете автоматически записывать видеоролик выполняемого теста, чтобы разработчик видел то же самое, что и тестировщик. Другие адаптеры позволяют собирать системную информацию и журналы событий на компьютере, где выполняются тесты.

Мы добавили адаптеры диагностических данных IntelliTrace для автоматического фонового сбора файлов IntelliTrace. Когда какая-то стадия теста завершается ошибкой и тестировщик регистрирует ее, собранный файл IntelliTrace автоматически загружается в TFS и сопоставляется с зарегистрированной ошибкой. Это дает разработчику куда больший набор информации для отладки, чем простое описание шагов, необходимых для воспроизведения ошибки. Когда разработчик открывает файл IntelliTrace, сопоставленный с зарегистрированной ошибкой, он имеет дело примерно с тем же, что и при отладке с использованием мини-дампа, но не на момент краха приложения, а в процессе всего времени его выполнения. Данные IntelliTrace можно собирать для любого управляемого приложения на локальных или удаленных агентах тестирования, в том числе от приложений ASP.NET, работающих под управлением IIS.

Когда я открываю TFS-ошибку, MTM автоматически добавляет шаги, необходимые для воспроизведения, на основе этапов ручного теста, описанных тестировщиком. Что еще интереснее, если я смотрю на вкладку All Links в описании ошибки (рис. 11), то вижу, что файл IntelliTrace тоже был создан. Дважды щелкнув этот файл, я открываю его представление IntelliTrace Summary (рис. 12).

image: Collected IntelliTrace Files Are Accessible Through the “All Links” Tab

Рис. 11 Собранные IntelliTrace файлы доступны через вкладку All Links

image: The IntelliTrace Summary Provides an Overview of What Data Was Collected

Рис. 12 IntelliTrace Summary дает общее представление о том, какие данные были собраны

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

Также отображается список всех исключений, собранных в файле Intelli­Trace. Если выбрать какое-нибудь исключение, на временном графике потоков появится вертикальная оранжевая линия, указывающая, в какое время возникло это исключение. Дважды щелкнув это исключение, вы запустите сеанс отладки из файла IntelliTrace, и в представлении Intelli­Trace Events будет выделено соответствующее событие. Ниже на странице показывается список всех событий теста, соответствующих этапам воспроизведения проблемы вручную. Заодно выводится и результат на каждом таком этапе. Щелкнув одно из этих событий, вы поместите вертикальную линию во временной график потоков, а двойным щелчком события запустите сеанс отладки из файла IntelliTrace с выбором ближайшего возможного события. В нижней части обзорной страницы отображается список с системной информацией о компьютере, на котором выполнялась тестовая программа, а еще ниже находится список всех модулей, загруженных в процесс, и пути к их файлам.

Вас, вероятно, интересует, а работает ли все это в выпускных сборках? Разумеется! Более того, вам не нужен доступ к символам при сборе или просмотре данных IntelliTrace. Символы необходимы лишь для связывания собранных данных с файлами исходного кода, так что они полезны при первом открытии сеанса отладки.

В Visual Studio 2010 и TFS добавили поддержку сервера символов и исходного кода, поэтому, если ваше приложение было скомпилировано системой сборки TFS, требуемые версии символов и исходного кода будут при необходимости автоматически загружены из TFS самим IntelliTrace. Вам даже незачем знать путь к серверу символов.

Как только вы начинаете сеанс отладки с обзорной страницы, отладчик работает точно так же, как в сеансе активной отладки (рис. 13). Вам доступно большинство окон отладчика, и вы можете переходить к любым данным, собранным IntelliTrace.

image: When Debugging Starts from the Summary Page, Visual Studio Operates Just Like a Live Debugging Session

Рис. 13 Когда отладка начинается с обзорной страницы, Visual Studio работает так же, как и в сеансе активной отладки

Заключение

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

Джастин Маркс (Justin Marks)  пришел в корпорация Майкрософт в 2002 году после получения степени бакалавра в области компьютерных наук и прикладных технологий от Массачусетского института технологий (МИТ). Работал инженером систем в MSN.com, потом инженером-тестировщиком ПО для Windows, а сейчас являет менеджером программ в одной из групп Visual Studio. В качестве менеджера программ в группе диагностики принимал участие в создании IntelliTrace для следующего выпуска Visual Studio 2010.

Выражаю благодарность за рецензирование статьи эксперту Люку Хобану (Luke Hoban). Билл Борис (Bill Boris), Дэвид Грей (David Gray), Хабиб Хейдариан (Habib Heydarian) и Джон Роббинс (John Robbins)