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

       

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


Кто должен читать эту книгу?
Замечание для разработчиков на Visual Basic
Как нужно читать эту книгу
Системные требования
ПРОЧИТАЙТЕ ЭТО!
Обратная связь

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

Ошибки и отладка
Что такое ошибки?
Противоречивые интерфейсы пользователя
Несоответствие ожиданиям

Низкая производительность
Аварийные завершения и искажение данных
Ошибки процесса разработки и их устранение
Короткие или недопустимые предельные сроки разработки
Необдуманное программирование
Неправильное понимание требований
Недостаточная подготовленность разработчика
Недостаточные обязательства по качеству

Планирование отладки
Предпосылки к отладке
Набор навыков
Освоение набора навыков
Процесс отладки
Шаг 1. Дублируйте ошибку
Шаг 2. Опишите ошибку

Шаг 3. Всегда предполагайте, что ошибку допустили вы
Шаг 4. Разделяйте и преодолевайте
Шаг 5. Думайте творчески
Шаг 6. Используйте инструменты усиления отладки
Шаг 7. Начните интенсивную отладку
Шаг 8. Убедитесь, что ошибка исправлена
Шаг 9. Изучайте и разделяйте проблемы с коллегами
Заключительный секрет процесса отладки
Резюме

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

Постоянно отслеживайте изменения

Системы управления версией
Управление изменениями
Важность использования меток
Системы отслеживания ошибок
Выбор подходящих систем
Планируйте время для построения систем отладки
Стройте все конфигурации продукта с символами отладки
Рассматривайте предупреждения как возможные ошибки

Адреса загрузки DLL

Проектируйте облегченную диагностическую систему для выпускных конфигураций
Частые построения и интенсивные тесты обязательны
Частые построения
Smoke-тесты
Создайте программу установки

Специалисты по качеству должны тестировать отладочные конфигурации
Резюме

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

Операторы утверждений
Как и что следует проверять с помощью утверждений
Описание Функции isArray Проверяет

Обзор операторов утверждений для Visual C++ и Visual Basic

Программа SUPERASSERT
Трассировка
Комментарии
Блочное тестирование
Резюме

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

Типы Windows-отладчиков
Отладчики режима пользователя
Отладчики режима ядра

Поддержка подчиненных отладчиков в Windows 2000
Проверка динамических областей памяти в Windows 2000
Автоматический запуск приложений в отладчике

Быстрые клавиши прерываний
MinDBG: простой отладчик для Win32

WDBG: реальный отладчик
Чтение и запись памяти
Точки прерывания и пошаговый проход
Таблицы символов, символьные машины и проход стека

Операции Step Into, Step Over и Step Out
Интересная проблема разработки WDBG
Итак, вы хотите написать собственный отладчик?
WDBG: что делать дальше?
Резюме

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

Расширенные точки прерывания

Синтаксис расширенных точек прерывания и позиционные точки прерывания
Быстрое прерывание на произвольной функции
Точки прерывания на системных или экспортируемых функциях
Модификаторы позиционных точек прерывания

Точки прерывания глобальных выражений и условные точки прерывания
Условии или в данных. Если же
Точки прерывания Windows-сообщений
Удаленная отладка

Советы и специальные приемы
Установка точек прерывания
Окно Watch

Команда Set Next Statement
Отладка компилированного кода Visual Basic
Резюме

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

Основы CPU
Регистры
Формат инструкции и адресация памяти

Встроенный ассемблер Visual C++
Инструкции, которые нужно знать
Манипуляции со стеком
Самые общие простые инструкции
Общая последовательность: вход и выход из функции
Доступ к параметрам, глобальным и локальным переменным

Вызов и возврат из процедур
Соглашения о вызовах
Пример соглашений о вызовах
Дополнительные инструкции
Манипуляции с данными

Манипуляции с указателями
Сравнение и проверка
Инструкции переходов и ветвлений
Циклы
Манипуляции со строками
Общие конструкции языка ассемблера

Доступ через регистр FS
Создание или уничтожение SEH-кадра
Ссылки на структуры и классы
Полный пример
Окно Disassembly
Навигация
Просмотр параметров в стеке

Окна Memory и Disassembly
Советы и специальные приемы
Endians
Код мусора

Регистры и окно Watch
Изучайте ASM-файлы
Резюме

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

Р-код Visual Basic
Урок истории р-кода
Последствия работы с отладчиком
Перехват ошибок: режимы Break In или Break On
Режим Break On All Errors

Режим Break On Unhandled Errors
Режим Break In Class Module
Заключительные предложения по перехвату ошибок
Окна отладчика Visual Basic
Окно Locals
Окно Immediate
Окно Watch
Советы и специальные приемы

Добавьте кнопку Run To Cursor к панели инструментов Debug
Отключите режим Compile On Demand
Групповые проекты как способ перехода к отладке
Отладка и реальность
Резюме

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

Создание и чтение МАР-файла
Содержимое МАР-файла

Поиск функции, исходного файла и номера строки
Использование утилиты CrashFinder
Основные моменты реализации

Что делать дальше с утилитой CrashFinder?
Резюме

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

Структурированная обработка исключений (SEH) и обработка исключений в C++
Структурированная обработка исключений
Обработка исключений средствами языка C++
Комбинирование обработки SEH- и С++-исключений

API-функция SetUnhandledExceptionFilter
Использование CrashHandler API


Трансляция структур EXCEPTION_POINTERS
Резюме

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

Основы программных служб
Использование API-функций
Обеспечение безопасности
Отладка служб
Отладка основного кода
Отладка базовых служб

Резюме

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

Требования к TraceSrv
TraceSrv и DCOMCNFG
Первые проблемы с TraceSrv
Программа TraceView и безопасность

Применение TraceSrv
Резюме

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

Рекомендации и приемы работы с многопоточностью
Отказ от многопоточной организации
Реализация потоков мелкими дискретными частями
Синхронизация потоков на самом низком уровне
Постоянный просмотр кода

Тестирование на мультипроцессорных машинах
Требования утилиты DeadlockDetection
DeadlockDetection и проблемы высокоуровневого проектирования
Использование DeadlockDetection

Реализация DeadlockDetection
Основные моменты реализации

Что делать дальше с DeadlockDetection?
Резюме

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

Бич блочного тестирования: интерфейсы пользователя
Требования, предъявляемые к утилите Tester
Применение утилиты Tester

Реализация утилиты Tester
Что делать дальше с утилитой Tester?
Резюме

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

Поиск решения
Требования к LIMODS

Использование LIMODS
Работа с MFC
Вызов LIMODS из кода
Выбор исходных файлов для трассировки
Реализация LIMODS
Определение диапазонов исходного кода
Определение диапазонов исходного кода - 2
LOM-файлы

Исключение исходных файлов из LOM-файлов
Что подключает LIMODSDLL.DLL
Обработка _сdесl-подключений
Подключение функций, экспортируемых по порядковому значению
Общие проблемы реализации

Что делать дальше с LIMODS?
Резюме

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

Свойства библиотеки DCRT
Использование DCRT-библиотеки
Выбор правильного варианта CRT-библиотеки
Использование MemDumperValidator

Использование MemDumperValidator в приложениях C++
Применение MemDumperValidator в приложениях С
Глубокие проверки корректности

Реализация MemDumperValidator
Инициализация и завершение в C++
Куда направляются отчеты об утечках памяти?
Использование утилиты MemStress
Интересная "стрессовая" проблема

Резюме

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

Журнал программы Dr. Watson для Windows 2000
Журнал программы Dr. Watson для Windows 98
Книги
Разработка программного обеспечения
Языки
Отладка и тестирование
Windows и Windows-технологии
CPU и аппаратные средства
Инструментальные средства
Web-сайты
Позиционные точки прерывания
Модификаторы позиционных точек прерывания
Точки прерывания глобальных выражений и условные точки прерывания

Точки прерывания сообщений

Содержание раздела