Отладка приложений

         

Как нужно читать эту книгу


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

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

Во второй части книги "Возможности отладки" (главы 4—7) объясняется, что такое отладчик, и описывается работа различных отладчиков. Кроме того, здесь довольно подробно рассмотрены отладчики Visual C++ и Visual Basic. Промышленные разработчики — от начинающих до самых опытных — используют лишь крошечную долю возможностей отладчиков Visual C++ и Visual Basic. Хотя это может показаться странным, но автор книги, целиком посвященной отладке, постарается держать читателя на максимальном удалении от отладчика. Главное, чему необходимо научиться — не то, как исправлять аварийные ситуации, а прежде всего то, как их следует избегать. Но рано или поздно любому разработчику приходится прибегнуть к помощи отладчика, поэтому следует также научиться с максимальной эффективностью использовать этот инструмент.

В третьей части книги "Инструменты и методики" (главы 8—15) предложены решения общих проблем отладки, с которыми сталкивается разработчик Windows-приложений. Охвачены темы от поиска исходного файла и номера строки с адресом сбоя и автоматической проверки пользовательских интерфейсов до идентификации места, в котором многопоточная программа заходит в тупик. Большинство глав в этой части включает утилиты и огромное количество исходного кода, который послужит читателю прекрасным учебным материалом.

Заключительная часть книги (приложения 1—4) содержит дополнительную информацию, которую вы найдете полезной в своих отладочных приключениях. В приложении 1 объясняется, как читать и интерпретировать журнал программы Dr. Watson. В приложении 2 приведены аннотированные списки ресурсов — книг, инструментов и Web-сайтов, которые помогли автору отточить навыки разработки и отладки. В приложении 3 описаны форматы точек прерывания. Приложение 4 содержит краткое описание прилагаемого компакт-диска.

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



Кто должен читать эту книгу?


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



Исходя из технической перспективы, "идеальным читателем" является тот, кто имеет опыт (от одного до трех лет) в применении систем программирования Microsoft Visual C++ и/или Microsoft Visual Basic. Предполагается также, что читатель является членом реальной команды разработчиков, и отправил заказчикам, по крайней мере, один продукт.

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



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


Мне хотелось бы знать, что вы думаете об этой книге. Если у вас есть вопросы или собственные истории отладочных войн — я рад был бы их услышать. Вы можете посылать их по адресу www.jprobbins.com, и на все обоснованные вопросы я попробую ответить. Я действительно получаю удовольствие от ваших вопросов, потому что пытаясь ответить на них, сам узнаю много нового. Мне удалось создать много разработок, однако, видимо, еще не все (пока!). Ваши вопросы дают мне возможность узнать о ваших победах и поражениях в работе с самыми новыми и грандиозными технологиями.

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



ПРОЧИТАЙТЕ ЭТО!


Символьная машина DBGHELP.DLL

В некоторых утилитах я использую символьную машину DBGHELP.DLL из операционной системы Windows 2000. На самом деле применялась символьная машина IMAGEHLP.DLL, которая была перемещена в DBGHELP.DLL с целью извлечения ее из DLL ядра операционной системы. Чтобы строить исходные коды этой книги, нужно иметь оба файла — DBGHELP.LIB и DBGHELP.H. На сопровождающем компакт-диске находится самая последняя (на момент написания книги) версия Platform SDK.

Нужно установить Platform SDK не только потому, что туда включено много отличных отладочных утилит, но и потому, что там можно также найти и файлы DBGHELP.LIB и DBGHELP.H. Для получения самых последних версий этого SDK нужно перед его установкой выполнить двойной щелчок на компакт-дисках универсальной подписки или на Web-адресе msdn.microsoft.com/developer/sdk.

Для работы символьной машины на Windows NT 4 и Windows 98 следует скопировать DBGHELP.DLL и MSDBI.DLL из Windows 2000 или из каталога < Platform SDK>\Redist\DbgHlp и разместить их в тот же каталог, что и использующую их программу. Например, если вы хотите применять программу CrashFinder для просмотра исходного файла и номера строки, в которой произошел отказ, нужно поместить DBGHELP.DLL в тот же каталог, что и CRASHFINDER.EXE.

Для того чтобы символьная машина DBGHELP.DLL находила ваши символы, помещайте PDB-файлы в тот же каталог, где вы создаете свои двоичные

файлы, либо поместите их в тот же каталог, в котором они уже находятся. Можно также сообщить символьной машине, где находятся PDB-файлы, с помощью специальных переменных окружения. Более подробно об этом можно узнать из MSDN-документации по API-функции SymInitiaiize.

Будьте готовы потратить некоторое время на то, чтобы заставить символьную машину DBGHELP.DLL работать. Понять, что она не работает, можно из того, что вы не получаете информацию о функции, или информация об исходном файле и номерах строк отсутствует в файлах, скомпилированных с отладочными PDB-символами. Работающая символьная машина DBGHELP.DLL даст вам превосходную возможность опробовать приемы отладки, обсуждаемые в этой книге. Я храню самую последнюю и полную информацию о символьной машине DBGHELP.DLL в разделе FAQ моего Web-сайта по адресу www.jprobbins.com. Изучив этот раздел и проводя небольшие отладки, вы должны получить свои отладочные символы.



Системные требования


Для того чтобы эффективно работать с этой книгой, вам потребуется:

Microsoft Windows 2000, Microsoft Windows NT 4 Service Pack 3 (или выше) или Windows Microsoft 98;  Microsoft Visual Studio 6.0 Service Pack 3 или выше;  DBGHELP.DLL и MSDBI.DLL (об этих файлах рассказывается ниже в разделе "ПРОЧИТАЙТЕ ЭТО! Символьная машина DBGHELP.DLL").



Замечание для разработчиков на Visual Basic


Читая эту книгу, вы заметите, что основное внимание уделено отладчику Visual C++, языкам С, C++ и ассемблеру. Тому есть две причины. Во-первых, языки С и C++ предоставляют разработчикам больше возможностей (чем язык Visual Basic) попасть в аварийные ситуации. Во-вторых, потому что отладчик Visual Basic не может отлаживать свой "родной" (native) откомпилированный двоичный код, и необходимо знать отладчик Visual C++, чтобы отладить приложение Visual Basic. При поверхностном взгляде можно подумать, что эта книга не охватывает Visual Basic, но внимательное чтение убеждает в обратном. Дойдя до реальной разработки на Visual Basic, читатель обнаружит, что почти вся книга применима и для этого случая. Отладка есть отладка, независимо от среды, окружающей разработку.