Лекция 06-07 - IDE, отладка, профилирование

реклама
СИСТЕМНОЕ И ПРИКЛАДНОЕ
ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ
Лекция 6.
Типовая структура IDE.
Системы программирования
• Комплекс инструментов, необходимых для
разработки и построения программ
• SDK (Software Development Kit)
• Изначально – разрозненный набор
инструментов, задача разработчика:
• подготовить исходный код
• откомпилировать модули
• подать результат компиляции (объектные файлы)
в компоновщик
• получить скомпонованную программу и запустить
её (под отладчиком)
2
Системы программирования
• Первый шаг автоматизации –
командные файлы
• Makefile
• скрипты командной оболочки
• Полный цикл сборки (и автоматического
тестирования)
3
Интегрированная среда
разработки
• Единая среда программных средств для
разработки ПО
• Включает
• редакторы
- исходного кода
- ресурсов
- форм
•
•
•
•
•
компилятор или интерпретатор
прикладные библиотеки
средства автоматизации сборки
отладчик
и др. инструменты
4
Интегрированная среда
разработки
Другие инструменты в составе IDE
• поддержка систем контроля версий
• профилировщики (profiler)
• инструменты автоматического
тестирования
• интеграция с системами управления
проектами (issue tracking system)
• и многое другое
5
Возможности редактора
текстов
•
•
•
•
Подстветка синтаксиса
Автокоррекция ошибок
Автодополнение кода
Визуализация модели кода
• дерево иерархии кода
• диаграмма классов
• графы вызовов функций
• Рефакторинг (действия над
программной моделью)
6
Управление версиями
Системы управления версиями дают
возможность
• хранить историю изменений
• поддерживать несколько ветвей с
изменениями одновременно
• отслеживать конфликты между вносимыми
изменениями из разных источников
• манипулировать изменениями
•
•
•
•
создавать новые версии документов и ветви версий
объединять ветви и порождать новые,
откатывать изменения (в рабочей копии и в репозитории)
получать код любой версии для работы с ним
7
СИСТЕМНОЕ И ПРИКЛАДНОЕ
ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ
Лекция 7.
Отладка и профилирование программ.
Способы отладки.
Цели и методы профилирования
программ.
Отладка
Отладчик
• Полностью контролирует отлаживаемое
приложение
• Останов приложения по прерыванию
• например, int 3 для x86-архитектур
• Отладочные символы
• «база данных» с адресами переменных,
функций, строк кода
• отдельный файл или в составе
скомпилированного модуля
10
Возможности отладки
приложений
•
•
•
•
•
•
•
Пошаговое выполнение
Точки останова (breakpoints)
Значения переменных (watch)
Стек вызовов
Перехват исключений
Состояние памяти и регистров
Анализ дампов памяти (memory/core
dump)
11
Возможности отладки
приложений
Продвинутые инструменты трассировки:
• Утечки ресурсов
• Потенциальные блокировки потоков
• Ошибки и опасные действия
12
Оптимизация
Профилирование
Оптимизация приложений
• Скорость работы – часть
нефункциональных требований
• Недостаточная скорость –
серьёзный ущерб качеству
• вплоть до провала проекта
• Нельзя полагаться, что завтра
компьютеры станут мощнее
14
Когда и что оптимизировать
• «Преждевременная оптимизация»
• не стоит ею заниматься – пока неизвестно,
где «узкое место» (bottleneck), может
оказаться пустой тратой времени
• но выбор алгоритмов и структур данных
полезно продумывать заранее
• Мониторинг эффективности
• профилирование и контроль за расходом
памяти
• Оптимизация «узких мест»
15
Процесс оптимизации
• Всегда ищем узкое место (bottleneck)
• Прибегаем к профайлерам и логам
• Компромисс между оптимизацией и
параллелизмом
• оптимизации могут усложнять код
• Контролируем результаты
• повторное профилирование
16
Оптимизация:
подходы
В порядке приоритета:
1. Более эффективные алгоритмы и структуры
данных
2. Высокоуровневые средства:
•
•
Распараллеливание
Кэширование/мемоизация, эффективная работа с
памятью
Низкоуровневые средства:
3.
•
•
•
•
Учёт специфики платформ (размеры линии кэша,
размещение инструкций, компиляторная оптимизация,
векторные инструкции, и т.п.)
Библиотечные функции от производителей CPU
Синтаксические трюки конкретных языков
Вычисления на графических картах
17
Оптимизация:
Алгоритмы
Затраты на выполнение растут, потому что:
• Алгоритм избыточно сложен
• Примеры:
- fib(n) = fib(n-2) + fib(n-1)
- pow(x, n) = x * pow(x, n-1)
• Решение – поиск алгоритмов с меньшей
вычислительной сложностью (в O-нотации)
- т.е. O(n logn) в среднем лучше, чем O(n^2)
- но на малых n может быть и наоборот
• Задержки при доступе к памяти
• последовательный доступ лучше случайного
- в т.ч., оптимизируется работа с кэшем процессора
• чем меньше обращений к памяти – тем лучше
18
Оптимизация:
Структуры данных
• Источники проблем:
• Накладные расходы на работу со структурами:
выделение/освобождение памяти
• Сложность алгоритмов доступа к структурам
- время поиска/добавления/удаления элемента, сортировки, и т.п.
• На примере STL:
• std::vector плох при частом добавлении/удалении элементов
(особенно произвольном)
- deque лучше подходит для вставки в голову/хвост
- list – для вставки/удаления в произвольной позицию
• последовательные контейнеры (vector, list, deque) хуже при
частом поиске или поддержании порядка
- лучше set/map, hash_set/hash_map
• и т.п.
19
Профилирование
• Сбор статистики: производительность кода
программы
• Профилировщик – отладчик особого рода,
контролирует выполнение, собирает данные
и формирует отчёт:
•
•
•
•
•
Общее время исполнения функции/метода
Удельное время исполнения
Количество вызовов
Структура вызовов функций (caller/callee)
Места возникновения конфликтов и пенальти
20
Профилирование:
качество тестовых данных
Главные характеристики
• Воспроизводимость сценария
• Репрезентативность
• тест максимально близок к реальному
применению
• Полнота охвата
• может потребоваться несколько сценариев
21
Профилирование приложений
Способы сбора информации:
Event-based (вызовы, возвраты,
исключения
Sampling (сбор статистики)
Instrumentation (модификация кода
приложения)
22
Ссылки и литература
• Функции отладчика Visual Studio
• http://www.rsdn.ru/article/vcpp/vcdebug-1.xml
• Работа с minidump в Windows:
• http://www.codeproject.com/Articles/1934/Pos
t-Mortem-Debugging-Your-Application-withMinidu (англ.)
• http://subscribe.ru/archive/comp.soft.prog.dev
doc/200702/09230037.html
• Р. Гербер, А. Бик, К. Смит, К. Тиан,
«Оптимизация ПО. Сборник рецептов»
23
Скачать