СИСТЕМНОЕ И ПРИКЛАДНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Лекция 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