Система Orphus

Отладка приложений для Microsoft .NET

Автор: Джон Роббинс
Издательство: Русская Редакция, Питер, 2008
512 страниц
ISBN: 978-5-75-02-0308-6
ISBN: 978-5-91180-856-3

Материал предоставил: Сергей Тепляков
Найти в магазинах

Аннотация

Содержание
Комментарии

Аннотация

В данной книге автор (эксперт по повышению качества кода Джон Роббинс) отходит от принятого ранее стиля изложения "для экспертов", описывая инструменты отладки, настройки и тестирования Visual Studio 2005, в расчете на реальных разработчиков. В ней содержится не только обзор "научных" техник отладки и инструкций от экспертов, но и советы по решению наиболее часто встречающихся в практике разработчика проблем. Благодаря этой книге программисты всех уровней подготовки смогут отточить свои навыки по отладке кода и использованию специальных инструментов для поиска ошибок, настройки и тестирования приложений (включая Test Explorer, Enterprise Performance Tool и WinDbg).

Содержание

Об авторе
Благодарности
Введение
Кому следует прочитать эту книгу?
Как читать эту книгу и что нового в третьем издании
Примеры кода
Организация этой книги
Требования к системе
Что включено в файлы примеров для книги?
Прочитайте это! Работа с ограниченными привилегиями
Отзывы
От издателя

Глава 1. Ошибки: откуда они берутся и как их устранять
Ошибки и отладка
Что такое ошибки?
Технологические ошибки и их решения
Планирование отладки
Предварительные условия для отладки
Набор навыков
Наработка навыков
Процесс отладки
Шаг 1. Воспроизведите ошибку
Шаг 2. Опишите ошибку
Шаг 3. Всегда предполагайте, что это ваша ошибка
Шаг 4. Разделяйте и властвуйте
Шаг 5. Думайте творчески
Шаг 6. Используйте инструменты
Шаг 7. Начните тяжелую отладку
Шаг 8. Убедитесь, что ошибка исправлена
Шаг 9. Извлеките урок и поделитесь им с другими
Последний секрет процесса отладки
Резюме

Глава 2. Подготовка к отладке
Отслеживайте изменения до окончания проекта
Системы управления версиями
Система отслеживания ошибок
Выбор подходящей системы
Запланируйте время для построения систем отладки
Создавайте все сборки с использованием символов отладки
Считайте предупреждения ошибками
Знайте, куда загружаются ваши сборки
При сборке всегда включайте анализ кода
Автономная утилита FxCop
Пользовательские правила Code Analysis
Обязательны частые сборки и дымовые тесты
Частые сборки
Великолепная система MSBuild
Написание собственных заданий MSBuild
Дымовые тесты
Работу над программой установки начинайте немедленно
Тестирование качества должно проводиться с отладочными сборками
Настройте хранилище символов
Настройте сервер-источник
Дзен сервера-источника
Простейшая индексация
Отладка с использованием серверов-источников
Более простая и эффективная индексация при помощи сервера-источника
Резюме

Глава 3. Отладка во время кодирования
Утверждать, утверждать и еще раз утверждать
Как и что утверждать
Утверждения в .NET
Утверждения в ASP.NET
SUPERASSERT.NET
Трассировать, трассировать и еще раз трассировать
Основы трассировки
Сложная трассировка
Комментировать, комментировать и еще раз комментировать
Резюме

Глава 4. Часто задаваемые вопросы об отладке приложений на платформе .NET
Вопросы о процессе и инфраструктуре
Почему я всегда должен разрабатывать под учетной записью, не имеющей прав администратора?
В чем секрет отладки?
Какой тип методологии разработки мне стоит использовать?
Нужно ли нам проводить проверки кода?
Что делать, если мы не можем воспроизвести сборки, отправленные за пределы команды?
Какие дополнительные параметры компилятора С# помогут мне при упреждающей отладке управляемого кода?
Какой процессор мне нужно указывать для моих сборок?
Когда мне следует замораживать обновления компилятора и других инструментов?
Есть ли какой-нибудь способ ускорить работу сервера-источника при первой отладке программы?
Как работает атрибут ConditionalAttribute?
Почему вы всегда помещаете константы слева от условных операторов?
В чем различие между отладочным двоичным файлом и релизом для платформы .NET?
Ошибки в Visual Studio
Visual Studio закрывается с ошибкой, когда я загружаю определенный проект
или когда я нажимаю клавишу F5, не позволяет отлаживать или не находит
контрольные точки. Что происходит?
Неожиданно определенная клавиша перестает работать в редакторе. Я пытался
удалить и заново установить среду, но все равно не могу использовать эту клавишу.
Как вернуть ее обратно?
Что случилось с меню Debug (Отладка) (или другой крупной частью пользовательского интерфейса)?
Планирование отладки
Как реализовывать обработку исключений?
Как регистрировать необработанные исключения в приложениях?
Когда следует помещать финализатор в класс?
Вопросы, связанные с отладчиком
Мне нужен отладчик в производственной системе.
Придется ли мне приобретать дополнительную копию
Visual Studio для этой машины?
Что такое VSHOST?
Можно ли отлаживать хранимые процедуры SQL при помощи Visual Studio?
Как отлаживать сценарии при помощи Visual Studio?
Как отлаживать с другим уровнем прав доступа кода (Code Access Security, CAS)?
Почему иногда выбрасывается это раздражающее исключение
взаимоблокировки при переключении контекста, если остановиться в отладчике слишком надолго в приложении Windows Forms?
Что такое Managed Debugging Assistants?
Вопросы о сценарии отладки
Как отлаживать сборки в глобальном кэше сборок (GAC)?
Как отлаживать код запуска для службы Windows, написанной в .NET?
Мой босс отправляет мне так много электронных сообщений, что я не могу заниматься другими делами. Существует ли способ придушить этот поток излияний?
Какие существуют стратегии отладки взаимоблокировки?
Как отлаживать сборки этапа проектирования? Как отлаживать встраиваемые модули?
Как отлаживать проблемы, связанные с загрузкой сборок?
Как всегда получать информацию об источнике и строке в любом
неуправляемом исключении?
Какие средства вы используете?
Все от Syslnternals!
RegexDesigner.NET от Sellsbrothers
Windows Installer XML (WiX)
Прочие инструменты
Резюме

Глава 5. Расширенные возможности отладки с использованием Visual Studio
Расширенные контрольные точки и их использование
Советы по использованию контрольных точек
Быстрый вход в любую функцию
Модификаторы контрольных точек местоположения
Окно Watch (Наблюдение)
Спецификаторы формата и вычисление свойств
Создание идентификатора объекта
Всплывающие подсказки с данными
Расширение собственных типов
Визуализаторы отладчика
Вызов методов в окнах семейства Watch (Наблюдение)
Сложные советы и трюки
Команда Set Next Statement
Отладка в смешанном режиме
Отладка исключений
Отладка нескольких потоков и процессов
Резюме

Глава 6. WinDBG, SOS и ADPIus
Перед тем, как начать
Установка
Дополнительное чтение
Основы
Настройка сервера символов
Параметры и окна WinDBG
Работа с отлаживаемой программой
Окно Command (Команда)
Обращение к справке
Проверка правильности загруженных символов
Процессы и потоки
Прохождение неуправляемого стека
Исключения и события
Команды для управления WinDBG
Обработка файлов дампа
Чрезвычайно полезные команды расширения
SOS
Загрузка SOS в WinDBG
Загрузка SOS в Visual Studio
Получение справки и использование команд
Состояние программы и управляемые потоки
Управляемые стеки вызовов
Отображение данных объектов
Просмотр куч для сбора мусора
Исключения и контрольные точки
Взаимные блокировки
Прочие команды SOS
ADPIus
Режим зависания
Режим аварийного сбоя
Фиксация состояния в нужный момент
Резюме

Глава 7. Расширение IDE Visual Studio
Расширение при помощи макросов
Параметры макросов
Отладка макроса
Элементы кода
CommenTater
Больше макросов для вас
Встраиваемые модули Visual Studio
Трюки разработки встраиваемых модулей
Страницы параметров и встраиваемый модуль HiddenSettings
Встраиваемый модуль SettingsMaster
Резюме

Глава 8. Написание правил Code Analysis
Размышления о разработке правил
Основы разработки правил
Первостепенный метод Check
Расширенная разработка правил
Правила DoNotUseTraceAssertRule и CallAssertMethodsWithMessageParametersRule
Правила DoNotLockOnPublicFields, DoNotLockOnThisOrMe, DoNotLockOnTypes и
DoNotUseMethodlmplAttributeWithSynchronized
Правило AvoidBoxingAndUnboxinglnLoops
Правила ExceptionDocumentationlnvalidRule и ExceptionDocumentationMissingRule
Резюме

Комментарии

Сергей Тепляков

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

«Ошибки – это круто! Они помогают залезть в самую глубину и понять, как работают вещи. Мы все попали в этот бизнес, потому что нам нравится учиться, выслеживание ошибок – неотъемлемая часть обучения… Ведь так здорово бывает найти и исправить ошибку! Конечно же, самые хорошие ошибки – это те, которые обнаруживаются до того, как заказчик увидит ваш продукт. Таким образом, вы должны успевать сделать свою работу и найти ошибки до того, как это сделают ваши заказчики. Видеть, как заказчики обнаруживают ошибки, - это совершенно не круто».

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

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

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

Третья глава посвящена «упреждающему программированию» или «отладке во время кодирования», а именно утверждениям, трассировке и комментированию кода. Наиболее интересным является обзор и реализация инструмента SUPERASSERT.NET, который способен в значительной степени облегчить процесс последующего поиска ошибок.

Далее, автор касается чрезвычайно широкого спектра вопросов. Это и отладка запуска служб, и решение проблем, связанных с многопоточностью и отладкой взаимоблокировок, и реализация обработки исключений, и решение проблем с загрузкой сборок. Также описаны расширенные возможности отладки с использованием Visual Studio, утилиты WinDBG, SOS, FxCop и даже написание собственных правил Code Analysis.

Автор дает ответы на многие вопросы, связанные с разработкой и отладкой программного обеспечения. Но что еще больше впечатляет, так это перечень тем, которые автор поднимает на страницах своей книги. Книга не отличается глубиной изложения, в ней не рассматривается во всех подробностях IL, работа компилятора или внутренности среды CLR. Самым полезным является расширение вашего кругозора, возможность проанализировать собственный опыт и более подробно изучить хромающую область.

Омрачает эту светлую картину только одна проблема – перевод. В книге хватает как откровенных ляпов, так и просто некорректно переведенных терминов или фраз. В книге встречаются переходные разработчики (intermediate developer), собственные приложения (native applications), вползание функций (feature creep), язык посредника (intermediate language) и многое другое. Нельзя сказать, что подобных проблем слишком много или что они сильно сказываются на восприятии материала, но все же издательству следует подходить к таким вопросам более серьезно.

Несмотря на это книга, безусловно, стоит затраченных средств и усилий и будет полезна большинству разработчиков. И самое главное, «помните, что отладчик – это всего лишь инструмент, как, например, отвертка. Он делает только то, что вы приказываете ему делать. Настоящий отладчик находится у вас в голове».