![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ошибки - жуткая гадость. Многоточие... Ошибки являются причиной обреченных на гибель проектов с сорванными сроками, ночными бдениями и опостылевшими коллегами. Ошибки могут превратить вашу жизнь в кошмар, поскольку, если изрядное их число затаится в вашем продукте, пользователи могут прекратить его применение, и вы потеряете работу. Ошибки - серьезный бизнес.
Много раз люди из нашей среды называли ошибки всего лишь досадным недоразумением. Это утверждение далеко от истины, как никакое другое. Любой разработчик расскажет вам о проектах с немыслимым количеством ошибок и даже о компаниях, загнувшихся оттого, что их продукт содержал столько ошибок, что был непригоден. Когда я писал первое издание этой книги, NASA потеряла космический зонд, направленный на Марс, из-за ошибок, допущенных при выработке требований и проектировании ПО. Во время написания данного издания на солдат американского спецназа упала бомба, направленная на другую цель. Причиной была программная ошибка, возникшая при смене источника питания в системе наведения. По мере того как компьютеры управляют все более ответственными системами, медицинскими устройствами и сверхдорогой аппаратурой, программные ошибки вызывают все меньше улыбок и не рассматриваются как нечто самой собой разумеющееся.
Я надеюсь, что эта книга прежде всего поможет вам узнать, как писать программы с минимальным числом ошибок и отлаживать их побыстрее. При правильном подходе вы сэкономите на отладке массу времени. Речь не идет о выработке требований и проектировании, но отлаживать вы наверняка научитесь более грамотно. В этой книге описывается интегральный подход к отладке. Я рассматриваю отладку не как отдельный шаг, а как составную часть общего цикла производства ПО. Я считаю, что ее следует начинать на этапе выработки требований и продолжать вплоть до стадии производства.
Две вещи делают отладку в средах Microsoft .NET и Microsoft Windows сложной и отнимающей много времени. Во-первых, отладка требует опыта - в основном вам потребуется все постигать самим. Даже если у вас специальное образование, бьюсь об заклад, что вы никогда не сталкивались со специальным курсом, посвященным отладке. В отличие от таких эзотерических предметов, как методы автоматической верификации программ на языках программирования, которые ни один дурак не использует, или разработка отладчиков для дико прогрессивных и жутко распараллеленных компьютеров, наука отладки, применяемая в коммерческом ПО, похоже, совсем не популярна в вузовском истэблишменте. Некоторые профессора наставляют: главное - не писать программы с ошибками. Хоть это и выдающаяся мысль и идеал, к которому все мы стремимся, в действительности все слегка по-другому. Изучение систематизированных проверенных методик отладки не спасет от очередной ошибки, но следование рекомендациям этой книги поможет вам сократить число ошибок, вносимых в код, а те из них, которые все-таки туда прокрались, найти быстрее.
Вторая проблема в том, что, несмотря на обилие прекрасных книг по отдельным технологиям .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 и SoftlCE. Тогда же я начал вести рубрику "Bugslayer" в "MSDN Magazine", а затем взялся и за первое издание этой книги. Благодаря фантастической переписке по электронной почте и общению с инженерами, разрабатывающими все мыслимые типы приложений, я получил огромный опыт.
И, наконец, самое важное, что сформировало мое мировоззрение, - участие в создании и работе Wintellect, что позволило мне пойти далеко вперед и помогать в решении весьма серьезных проблем компаниям по всему миру. Представьте, что вы сидите на работе, на часах - полдень, в голове - никаких идей, а клиент может обанкротиться, если вы не найдете ошибку. Сценарий устрашающий, но адреналина хоть отбавляй. Работа с лучшими инженерами в таких компаниях, как 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. Наконец, поскольку вы можете (и должны) уделять огромное внимание отладке на этапе кодирования, я рассказываю про упреждающую отладку при написании кода. Заключительное слово в обсуждении темы первой части - в главе 3, в которой говорится об утверждениях в .NET и Win32.
Часть II "Производительная отладка" (главы с 4 по 8) я начинаю объяснением поддержки отладки со стороны ОС и рассказываю о работе отладчика Win32, так как Win32-oтлaдкa имеет больше потаенных мест, чем .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-сайтов), которые помогли мне отточить свое мастерство как разработчика/отладчика.
В первом издании я предложил несколько врезок с фронтовыми очерками об отладке. Реакция была ошеломляющей, и в этом издании я существенно увеличил их число. Надеюсь, поделившись с вами примерами некоторых действительно "хороших" ошибок, я помог обнаружить (или внести!) аналогичные, и вы увидели практическое применение рекомендуемых мной подходов и методик. Мне также хотелось бы помочь вам избежать ошибок, сделанных мной.
У меня был список вопросов, которые мне задали в связи с первым изданием, и на них я ответил во врезках "Стандартный вопрос отладки".
Второе издание отличной книги. Причем расширенное и исправленное по отзывам читателей в части отладки неуправляемого кода и дополненное сведениями об отладке приложений .NET. Расширена книга значительно - 736 страниц против 490 в первом издании.
Особо хочется отметить сугубо практический подход автора к излагаемому материалу - если речь идет о пользе отладочных символов ОС, то тут же следует подробная инструкция по достижению символьной нирваны - созданию собственного сервера отладочных символов для вашей команды, рассматривается применение ASSERT-ов - автор проводит читателя по этапам реализации SUPERASSERT-а, выводящего в окне сообщения максимум информации, включая стек вызовов:
Даже рассмотрение вопросов блокировок в многопоточных приложениях заканчивается созданием утилиты DeadlockDetection для обнаружения мест блокировок и вывода максимальной информации для разработчика.
Максимум всесторонней информации по отладке приложений и отличная коллекция отладочных библиотек и утилит, разработанных автором (вместе с их исходными кодами!) делают книгу незаменимой для любого разработчика приложений под Windows.
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |