Отладка приложений
Кто должен читать эту книгу?
Замечание для разработчиков на 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-функций
Обеспечение безопасности
Отладка служб
Отладка основного кода
Отладка базовых служб
Резюме
Отладка приложений
Требования к TraceSrvTraceSrv и 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-сайты
Позиционные точки прерывания
Модификаторы позиционных точек прерывания
Точки прерывания глобальных выражений и условные точки прерывания
Точки прерывания сообщений
Содержание раздела