Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Роббинс Д. - Отладка приложений для Microsoft .NET и Microsoft Windows - 2004

.pdf
Скачиваний:
361
Добавлен:
13.08.2013
Размер:
3.3 Mб
Скачать

Оглавление XI

Глава 19 Утилита Smooth Working Set

661

Оптимизация рабочего набора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 Работа с SWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 Настройка компиляндов SWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 Выполнение приложений вместе с SWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 Генерирование и использование файла порядка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Реализация SWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 Функция _penter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 Формат файла .SWS и перечисление символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 Период выполнения и оптимизация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 Что после SWS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

Ч А С Т Ь

V

 

ПРИЛОЖЕНИЯ

 

685

Приложение A Чтение журналов Dr. Watson

686

Журналы Dr. Watson .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 688

Приложение Б Ресурсы для разработчиков приложений

 

.NET и Windows

 

696

Книги . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 696

Разработка ПО

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 697

Отладка и тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 698

Технологии .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 699

Языки C/C++ . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 700

ОС Windows и технологии Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 700

Процессоры Intel и аппаратные средства ПК . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 701

Программные средства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 702

Web=сайты . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 703

Предметный указатель

704

Об авторе

 

710

Моей жене Пэм.

Я тебе еще не говорил сегодня, как я тобой горжусь?

Памяти Хелен Роббинс.

Ты всегда нас объединяла. Нам страшно не хватает тебя.

Благодарности

Если вы читали первое издание этой книги, какие нибудь статьи в рубрике «Bugs layer», слушали мои выступления на конференциях или были на моих учебных курсах, я вам очень признателен! Ваш интерес к отладке и написанию правиль ного кода — это то, что заставило меня много и напряженно поработать над вто рым изданием. Благодарю за переписку и дискуссии. Вы подвигли меня на боль шое дело, спасибо.

Пять экстраординарных людей помогли этой книге выйти в свет, и у меня не хватает слов, чтобы выразить им свою благодарность: Сэлли Стикни (редактор проекта в квадрате!), Роберт Лайон (технический редактор), Джин Росс (техни ческий редактор), Виктория Тулман (редактор рукописи) и Роб Нэнс (художник). Из моих бессвязных записей и уродливых рисунков они сделали книгу, которую вы держите в руках. Они приложили просто громадные усилия, и я не знаю, как их благодарить.

Как и в первом издании, мне помогла замечательная «Команда Рецензентов». Эти душевные ребята получали мои наброски и советовали абсолютно потряса ющие отладочные трюки. Они представляют элиту нашего бизнеса, и мне нелов ко, что я отнял у них столько времени. Вот они, все как на подбор: Джо Эббот (Microsoft), Скотт Байлес (Gas Powered Games), Келли Брок (Electronic Arts), Пи тер Иерарди (Software Evolutions), Спенсер Лау (Microsoft), Брайан Мориарти (Intuit), Джеймс Нэфтел (XcelleNet), Кристоф Назарре (Business Objects), Озирис Педрозо (Optimizer Consulting), Энди Пеннел (Microsoft), Джеффри Рихтер (Wintel lect) и Барри Танненбаум (Compuware).

Мне также льстит, что я могу считать себя одним из Wintellect’уалов, сделав ших огромный вклад в эту книгу: Джим Бэйл, Франческо Балена, Роджер Боссо нье, Джейсон Кларк, Пола Дениэлс, Питер ДеБетта, Дино Эспозито, Гэри Эвинсон, Дэн Фергас, Льюис Фрейзер, Джон Лэм, Берни МакКой, Джэф Просиз, Брэнт Рек тор, Джеффри Рихтер, Кенн Скрибнер и Крис Шелби.

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

Введение

Ошибки — жуткая гадость. Многоточие... Ошибки являются причиной обречен ных на гибель проектов с сорванными сроками, ночными бдениями и опосты левшими коллегами. Ошибки могут превратить вашу жизнь в кошмар, поскольку, если изрядное их число затаится в вашем продукте, пользователи могут прекра тить его применение, и вы потеряете работу. Ошибки — серьезный бизнес.

Много раз люди из нашей среды называли ошибки всего лишь досадным не доразумением. Это утверждение далеко от истины, как никакое другое. Любой разработчик расскажет вам о проектах с немыслимым количеством ошибок и даже о компаниях, загнувшихся оттого, что их продукт содержал столько ошибок, что был непригоден. Когда я писал первое издание этой книги, NASA потеряла кос мический зонд, направленный на Марс, из за ошибок, допущенных при выработ ке требований и проектировании ПО. Во время написания данного издания на солдат американского спецназа упала бомба, направленная на другую цель. При чиной была программная ошибка, возникшая при смене источника питания в системе наведения. По мере того как компьютеры управляют все более ответствен ными системами, медицинскими устройствами и сверхдорогой аппаратурой, про граммные ошибки вызывают все меньше улыбок и не рассматриваются как нечто самой собой разумеющееся.

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

Две вещи делают отладку в средах Microsoft .NET и Microsoft Windows сложной и отнимающей много времени. Во первых, отладка требует опыта — в основном вам потребуется все постигать самим. Даже если у вас специальное образование, бьюсь об заклад, что вы никогда не сталкивались со специальным курсом, посвя щенным отладке. В отличие от таких эзотерических предметов, как методы авто матической верификации программ на языках программирования, которые ни один дурак не использует, или разработка отладчиков для дико прогрессивных и жутко распараллеленных компьютеров, наука отладки, применяемая в коммерчес ком ПО, похоже, совсем не популярна в вузовском истэблишменте. Некоторые профессора наставляют: главное — не писать программы с ошибками. Хоть это и выдающаяся мысль и идеал, к которому все мы стремимся, в действительности все слегка по другому. Изучение систематизированных проверенных методик отлад

Введение XV

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

Вторая проблема в том, что, несмотря на обилие прекрасных книг по отдель ным технологиям .NET и Windows, ни в одной из них отладка не описана подробно. Для отладки в рамках любой технологии нужно знать гораздо больше, чем отдель ные аспекты технологии, описываемой в той или другой книге. Одно дело знать, как встроить элемент управления ASP.NET на страницу, совсем другое — как пол ностью отладить элемент управления ASP.NET. Для его отладки нужно знать все тонкости .NET и ASP.NET, знать, как различные DLL помещаются в кэш ASP.NET и как ASP.NET находит элементы управления. Многие книги объясняют реализацию таких сложных функций, как соединение с удаленной базой данных с примене нием современнейших технологий, но когда в вашей программе не работает «db.Connect (“Foo”)» — а рано или поздно это обязательно случается! — прихо дится самому разбираться во всей технологической цепочке. Кроме того, хотя есть несколько книг по управлению проектами, в которых обсуждаются вопросы от ладки, в них делается упор на управленческие и административные проблемы, а не на задачи разработчиков. Эти книги могут включать прекрасную информацию о планировании отладки, но от этого мало толку, когда вы сталкиваетесь с разру шением базы данных или сбоем при возврате из функции обратного вызова.

Идея этой книги — плод моих проб и ошибок как разработчика и менеджера, старающегося вовремя поставить высококачественный продукт, и как консультанта, пытающегося помочь другим завершить свои разработки в срок. Год за годом я накапливал знания и подходы, применяемые для решения двух описанных про блем, чтобы облегчить разработку Windows приложений. Для решения первой проблемы (отсутствия формального обучения по вопросам отладки) я написал первую часть этой книги — четкий курс отладки с уклоном в коммерческую раз работку. Что касается второй проблемы (потребности в книге по отладке именно

в.NET, а также в традиционной Windows среде), я считаю, что написал книгу, за полняющую пробел между специфическими технологиями и будничными, но жиз ненно необходимыми практическими методами отладки.

Ясчитаю, мне просто повезло заниматься почти исключительно вопросами отладки последние восемь лет. Сориентировать свою карьеру на отладку мне по могли несколько событий. Первое: я был одним из первых инженеров, работав ших в компании NuMega Technologies (ныне часть Compuware) над такими кру тыми проектами, как BoundsChecker, TrueTime, TrueCoverage и SoftICE. Тогда же я начал вести рубрику «Bugslayer» в «MSDN Magazine», а затем взялся и за первое издание этой книги. Благодаря фантастической переписке по электронной почте и общению с инженерами, разрабатывающими все мыслимые типы приложений, я получил огромный опыт.

И, наконец, самое важное, что сформировало мое мировоззрение, — участие

всоздании и работе Wintellect, что позволило мне пойти далеко вперед и помо гать в решении весьма серьезных проблем компаниям по всему миру. Представь те, что вы сидите на работе, на часах — полдень, в голове — никаких идей, а кли ент может обанкротиться, если вы не найдете ошибку. Сценарий устрашающий, но адреналина хоть отбавляй. Работа с лучшими инженерами в таких компаниях,

XVI Введение

как Microsoft, eBay, Intuit и многими другими — лучший из известных мне спосо бов узнать все методы и хитрости для устранения ошибок.

Для кого эта книга?

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

С технической точки зрения, «идеальный читатель» — это некто, имеющий опыт разработки для .NET или Windows от одного до трех лет. Я также рассчитываю, что читатель является членом реальной команды и уже поставил хотя бы один продукт. Хоть я и не сторонник навешивать ярлыки, в программной отрасли разра ботчики с таким уровнем опыта называются «средними».

Для опытных разработчиков тоже будет польза. Многие из наиболее заинте ресованных корреспондентов в переписке по первому изданию этой книги были опытные разработчики, которым, казалось бы, и учиться уже нечему. Я был заин тригован тем, что эта книга помогла им добавить новые инструменты в свой ар сенал. Так же, как и в первом издании, группа замечательных друзей под названи ем «Команда Рецензентов» просматривала и критиковала все главы, прежде чем я отправлял их в Microsoft Press. Эти инженеры, перечисленные в разделе «Благо дарности» этой книги, — сливки общества разработчиков, благодаря им каждый читатель этой книги узнает что нибудь полезное.

Как читать эту книгу и что нового во втором издании

Первое издание было ориентировано на отладку, связанную с Microsoft Visual Studio 6 и Microsoft Win32. Поскольку появилась совершенно новая среда разработки, Microsoft Visual Studio .NET 2003, и совершенно новая парадигма программиро вания, .NET, есть еще о чем рассказать. На самом деле в первом издании было 512 страниц, а в этой — около 850, так что новой информации хватает. Несколько моих рецензентов сказали: «Непонятно, почему ты называешь это вторым изданием, это же совершенно новая книга!» Чтобы вы правильно понимали, насколько второе издание больше первого, замечу, что в первом издании 2,5 Мб исходных текстов,

ав этом — 6,9! Не забывайте: это только исходные тексты и вспомогательные файлы,

ане скомпилированные двоичные файлы (скомпилировав все, вы получите бо лее 1 Гб). Что еще интересней, я даже не включил две главы из первого издания во второе. Как видите, это совершенно новая книга.

Яразделил книгу на четыре части. Первые две (главы с 1 по 8) следует читать по порядку, поскольку материал в них изложен в логической последовательности.

В части I «Сущность отладки» (главы с 1 по 3) я даю определение видов оши бок и описываю процесс отладки, которому следуют все порядочные разработ чики. По просьбе читателей первого издания я расширил и углубил обсуждение этих тем. Я также рассматриваю инфраструктурные требования, необходимые для правильной коллективной отладки. Настоятельно рекомендую уделить особое внимание вопросу установки сервера символов в главе 2. Наконец, поскольку вы

Введение XVII

можете (и должны) уделять огромное внимание отладке на этапе кодирования, я рассказываю про упреждающую отладку при написании кода. Заключительное слово в обсуждении темы первой части — в главе 3, в которой говорится об ут верждениях в .NET и Win32.

Часть II «Производительная отладка» (главы с 4 по 8) я начинаю объяснением поддержки отладки со стороны ОС и рассказываю о работе отладчика Win32, так как Win32 отладка имеет больше потаенных мест, чем .NET. Чем лучше вы разбе ретесь с инструментарием, тем лучше сможете его применять. Я также достаточ но глубоко разбираю отладчик Visual Studio .NET, так что вы научитесь выжимать из него по максимуму как в .NET, так и в Win32. Одна вещь, которую я узнал, ра ботая с программистами как опытными, так и очень опытными, — они использу ют лишь крошечную часть возможностей отладчика Visual Studio .NET. Хотя та кие сантименты могут казаться странными в устах автора книги об отладке, я хочу, насколько это возможно, оградить вас от применения отладчика. Читая книгу, вы увидите, что моя цель в первую очередь — научить вас избегать ошибок, а не на ходить их. Я также хочу научить вас использовать максимум возможностей отлад чика, поскольку все таки настанут времена, когда вы будете его применять.

Вчасти III «Мощные средства и методы отладки приложений .NET» (главы с 9 по 11) я предлагаю несколько утилит для .NET разработки. В главе 9 описаны потрясающие возможности расширения Visual Studio .NET. Я представляю несколько отличных макросов и надстроек, которые помогут ускорить разработку незави симо от того, с чем вы работаете: с .NET или только с Win32. В главах 10 и 11 рассказывается об отличном интерфейсе .NET Profiling API и представляются два инструмента, которые помогут вам отслеживать исключения и ход выполнения ваших .NET приложений.

Взаключительной части «Мощные средства и методы отладки неуправляемо го кода» (главы с 12 по 19) предлагаются решения распространенных проблем отладки, с которыми вы столкнетесь при написании Windows приложений. Я раскрываю темы от поиска исходного файла и номера строки для сбойного ад реса, до корректной обработки сбоев приложений. Главы с 15 по 18 были и в первом издании, однако я существенно изменил их текст, а некоторые утилиты (Deadlock Detection, Tester и MemDumperValidator) полностью переписал. Кроме того, такие утилиты, как Tester, прекрасно работают как с неуправляемым кодом, так и с .NET. И, наконец, я добавил два новых отладочных инструмента для Windows: FastTrace (глава 18) и Smooth Working Set (глава 19).

Приложения (А и Б) содержат дополнительную информацию, которую вы най дете полезной в своих отладочных приключениях. В приложении А я объясняю, как читать и интерпретировать журнал программы Dr. Watson. В приложении Б вы обнаружите аннотированный список ресурсов (книг, инструментов, Web сайтов), которые помогли мне отточить свое мастерство как разработчика/отладчика.

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

XVIII Введение

Уменя был список вопросов, которые мне задали в связи с первым изданием,

ина них я ответил во врезках «Стандартный вопрос отладки».

Требования к системе

Чтобы проработать эту книгу, вам потребуются:

Microsoft Windows 2000 SP3 или более поздняя версия, Microsoft Windows XP Professional или Windows Server 2003;

Microsoft Visual Studio .NET Professional 2003, Microsoft Visual Studio .NET Enterprise Developer 2003 или Microsoft Visual Studio .NET Enterprise Architect 2003.

Файлы примеров

Яуже сказал, что одних исходных текстов на диске 6,9 Мб. Учитывая, что это больше, чем в ином коммерческом проекте, держу пари, что ни в одной другой книге по

.NET или Windows вы столько примеров не найдете. Здесь более 20 утилит или библиотек и более 35 примеров программ, демонстрирующих отдельные кон струкции. Между прочим, в это число не входят блочные тесты для утилит и биб лиотек! Код большинства утилит проверялся в таком огромном количестве ком мерческих приложений, что я сбился со счета, когда их число перевалило за 800.

Ягоржусь, что столько компаний сочли мой код достаточно хорошим для своих продуктов, и надеюсь, что вам он тоже пригодится.

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

Сфайлами примеров также поставляются следующие стандартные средства от Microsoft:

Application Compatibility Toolkit (ACT) версия 2.6;

Debugging Tools for Windows версия 6.1.0017.2.

Яразрабатывал и проверял все проекты в Microsoft Visual Studio .NET Enterprise Edition 2003. Что касается ОС, я тестировал в Windows 2000 Service Pack 3, Windows XP Professional Service Pack 1 и Windows Server 2003 RC2 (прежде называвшуюся Windows .NET Server 2003).

ВНИМАНИЕ! ANSI-код Windows 98/Me

Поскольку Microsoft Windows Me устарела, я не поддерживал ОС, предшествую щие Windows 2000. Для Windows 2000 и более поздних я внес соответствующие изменения, в том числе перевел весь свой код в UNICODE. Я использовал макро сы из TCHAR.H, и интерфейсы к библиотекам, поддерживающим ANSI символы, остались. Однако я не компилировал ни одной программы как ANSI/мультибайт, так что здесь могут возникнуть проблемы с компиляцией или ошибки при выпол нении.

Введение XIX

ВНИМАНИЕ! Сервер символов DBGHELP.DLL

В нескольких утилитах с неуправляемым кодом я использовал сервер символов DBGHELP.DLL, поставляемый с Debugging Tools for Windows версии 6.1.0017.2. Поскольку DBGHELP.DLL теперь можно поставлять со своими приложениями, я включил эту библиотеку в каталоги Release и Output дерева исходных кодов. По ищите более новую версию Debugging Tools for Windows по адресу www.micro# soft.com/ddk/ debugging и скачать последнюю версию DBGHELP.DLL. Для компиля ции DBGHELP.LIB включена в Visual Studio .NET.

Если захотите использовать мои утилиты с неуправляемым кодом, запишите новую версию DBGHELP.DLL в каталог, содержащий утилиту. С Windows 2000 и Windows XP поставляется версия DBGHELP.DLL, предшествующая 6.1.0017.2.

Обратная связь

Мне очень интересно ваше мнение об этой книге. Если у вас есть вопросы или собственные фронтовые очерки об отладке, буду рад их услышать! Идеальное место для ваших вопросов по этой книге и по отладке в целом — форум «Debugging and Tuning» на www.wintellect.com/forum. Прелесть этого форума в том, что здесь вы можете покопаться среди вопросов других читателей и отслеживать возможные исправления и изменения.

Если у вас есть вопросы, которые неудобно публиковать на форуме, отправьте e mail по адресу john@wintellect.com. Имейте в виду, что я порядочно разъезжаю и получаю очень много электронной почты, так что вы не всегда получите ответ мгновенно. Но я обязательно постараюсь вам ответить.

Спасибо за внимание и счастливой отладки!

Джон Роббинс Февраль 2003 Холлис, Нью Гемпшир

XX Введение

Служба поддержки Microsoft Press

Мы приложили все усилия, чтобы обеспечить точность сведений, изложенных в книге и содержащихся в файлах примеров. Поправки к этой книге предоставля ются Microsoft Press через World Wide Web по адресу:

http://www.microsoft.com/mspress/support/

Чтобы подключиться к базе знаний Microsoft Press и найти нужную информа цию, откройте страницу:

http://www.microsoft.com/mspress/support/search.asp

Если у вас есть замечания, вопросы или предложения по поводу этой книги или прилагаемого к ней CD или вопросы, на которые вы не нашли ответа в Know ledge Base, присылайте их в Microsoft Press по электронной почте:

mspinput@microsoft.com или обычной почтой: Microsoft Press

Attn: Debugging Applications for Microsoft .NET and Microsoft Windows Editor One Microsoft Way

Redmond, WA 98052 6399

Пожалуйста, обратите внимание на то, что по этим адресам не предоставляет ся техническая поддержка.

Соседние файлы в предмете Программирование на C++