DTV-TraceInt Система отладки и анализа исполнения программ на основе отладочной трассы Иночкин Федор fedor.inochkin@gmail.com 2011.

Презентация:



Advertisements
Похожие презентации
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Advertisements

Системы программирования Системы программирования обеспечивают создания новых программ для компьютера. Современные системы программирования обычно представляют.
БЭСТ Дизайнер проектов Введение Концепции Основные понятия.
Отладка программного обеспечения. Определение отладки Отладка - этап разработки компьютерной программы, на котором, обнаруживают, локализуют и устраняют.
ОСНОВЫ ТЕХНОЛОГИИ РАЗРАБОТКИ ПРОГРАММ. Разработка программ - промышленное производство необходима технология разработки программ. Д. Кнут «Искусство программирования.
Отладка программы. Классификация ошибок 1.синтаксические; 2. ошибки времени выполнения; 3.алгоритмические. Синтаксические ошибки, обнаруживает компилятор,
Подсистема наблюдения, отладки и управления параллельным счетом для объектно- ориентированной системы программирования Чугунов Арсений научный руководитель:
Системы программирования Средства создания программ Интегрированные системы программированияИнтегрированные системы программирования Среды быстрого проектирования.
ПРЕЗЕНТАЦИЯ НА ТЕМУ: ПРЕЗЕНТАЦИЯ НА ТЕМУ: ВИДЫ ТРАНСЛЯЦИИ Составил: Ревнивцев М.В Преподаватель: Кленина В.И.
Лекция 6 Понятие операционных систем Учебные вопросы: 1. Характеристики ОС 2. Свободные и проприетарные ОС.
Отладка программного обеспечения
Жизненный цикл ПО. При разработки реального программного продукта возникают сложности. Часто решение задач не так очевидно, как кажется первоначально.
Подготовила асс. кафедры СМК Воробьева Т.А.. Программное обеспечение (ПО) - комплекс программ, обеспечивающих обработку или передачу данных, а также предназначенных.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
РЕЗУЛЬТАТЫ РАБОТЫ ПОДСИСТЕМЫ «ВЕДЕНИЯ». В процессе работы с подсистемой «Ведения», а также при ее завершении имеются достаточно широкие возможности по.
Технология подготовки и решения задач с помощью компьютера Этапы решения задач с помощью компьютера.
Алексей Игнатенко. Независимый программный модуль, обычно подключаемый на этапе выполнения программы.
Прерывания Определение прерывания Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств.
Методы тестирования Впрактике тестирования используются методы: статический, детерминированный, стохастический ивреальном масштабе времени. Статическое.
Транксрипт:

DTV-TraceInt Система отладки и анализа исполнения программ на основе отладочной трассы Иночкин Федор 2011

Отладка в жизни программиста этап разработки, на котором обнаруживают, локализуют и устраняют ошибки этап разработки, на котором обнаруживают, локализуют и устраняют ошибки обнаружение причины ошибки обнаружение причины ошибки в процессе: в процессе: –непосредственной разработки (кодирование) –тестирования (модуля, системы) 90-30% времени разработки (~жизни) 90-30% времени разработки (~жизни) –Зависит от используемых инструментов

Типы ошибок 1 Логические Логические if (!flag) printf(flag is set); «Не по спецификации» (неверное использование) «Не по спецификации» (неверное использование) –Кто виноват? Синхронизации (динамика процессов) Синхронизации (динамика процессов) –Deadlock –Низкая производительность

Типы ошибок 2 Устойчивые Устойчивые –Исправляются после первого прогона программы по пути с ошибкой Неустойчивые («гейзенбаги») Неустойчивые («гейзенбаги») –Появляются при сдаче программы в присутствии заказчика –50/50 или 0,01%

2 (+1) стратегии отладки «Breakpoint» «Breakpoint» –Пошаговое исполнение –Останов по заданному условию (ASSERT(1==2), *NULL=42, x/=0, …) –Останов при выполнении заданного оператора «Trace» «Trace» –Журналирование событий –Вывод значений переменных Статистический анализ Статистический анализ –Анализ времени исполнения участков программы –Анализ утечек памяти

2 стратегии отладки (+-) «Breakpoint» «Breakpoint» –(+) Позволяет просмотреть значение переменных к заданному моменту времени –Позволяет проследить путь программы после возникновения breakpoint в интерактивном режиме –Только частичная информация о пути до возникновения breakpoint (call stack) –(-) Нарушается real-time –(-) Ничего не сообщает о взаимодействии процессов «Trace» «Trace» –(+) Полная информация о пути (в случае наличия достаточно подробной трассы) – до и после возникновения ошибочной ситуации –(+) взаимодействие процессов –(+) не нарушает real-time –(-) требуется поиск участка трассы, относящегося к ошибочной ситуации (!) –Обычно сложно работать с многопоточными системами (перемешивание сообщений) –(-) нельзя узнать состояния переменных, которые не были включены в трассу –(+) читаемость программы (вывод информативных сообщений = комментарий) –(+) командная работа, обмен результатами в процессе отладки

Инструменты отладки «Breakpoint» «Breakpoint» –MSVS, GDB, …, …, … «Trace» «Trace» –Консоль (printf) –Файл (log, syslog) –«Внешняя» консоль (DbgView) –Перехват системных вызовов (ETW, DTrace) –Анализ трафика (сниферы), перехват запросов (SQL) –Мониторы ресурсов (устройства, файлы, объекты ядра) Статистический анализ Статистический анализ –TraceView (Android) –MSVS, GDB, …

Инструменты отладки - trace «Trace» «Trace» –Консоль (printf) –Файл (log, syslog) –«Внешняя» консоль (DbgView) –Перехват системных вызовов (ETW, DTrace) –Анализ трафика (сниферы), перехват запросов (SQL) –Мониторы ресурсов (устройства, файлы, объекты ядра) Трудно осуществить поиск нужного участка трассы Только взгляд «извне»

DTV-TraceInt DTV – пользовательский интерфейс DTV – пользовательский интерфейс –Захват трассы –Эффективное представление трассы –Интерактивная локализация интересующих участков трассы –Средства статистического анализа TraceInt TraceInt –Библиотека вывода отладочных сообщений –Набор макросов printf-стиля TRACE_INFO, TRACE_ERROR, TRACE_WARNING, TRACE_CALL, … TRACE_INFO, TRACE_ERROR, TRACE_WARNING, TRACE_CALL, …

DTV

TraceInt class CTraceTestClass { public: CTraceTestClass() { TRACE_CALL; } ~CTraceTestClass() { TRACE_CALL; } void do_smth() { TRACE_CALL; TRACE_INFO("Doing something..."); } }; Варианты подключения: -DLL -Статически

DTV Каждое сообщение трассы состоит из полей: Каждое сообщение трассы состоит из полей: –номер –метка времени –id процесса –имя модуля –id потока –уровень вложенности –тип –контекст (идентификатор экземпляра объекта, от которого исходит сообщение) –текст сообщения Выборка «двойным щелчком» Выборка «двойным щелчком» –Сообщения от процесса, модуля, потока, объекта, … –Текущая функция Фильтры сообщений Фильтры сообщений Call stack Call stack Профилировщик Профилировщик Работа в команде - обмен файлами.dt Работа в команде - обмен файлами.dt

DTV - настройка Фильтры отображения Фильтры отображения Список «захватываемых» модулей Список «захватываемых» модулей –Увеличение производительности системы за счет исключения некоторых модулей –Обычно модуль=exe/dll, но может быть класс или даже часть класса –Предел около сбщ/с

DTV-TraceInt – когда не следует использовать? Для отладки алгоритмов обработки данных с большим числом итераций (внутри цикла) Для отладки алгоритмов обработки данных с большим числом итераций (внутри цикла) –Предел сбщ/с В «конечных» версиях закрытых программ В «конечных» версиях закрытых программ –Проблема обратного инжиниринга (на основе текста отладочных сообщений) –TRACE_OFF

DTV-TraceInt - развитие Отображение timeline и MSC-диаграмм Отображение timeline и MSC-диаграмм Обработка сложных типов данных (изображения, массивы, …) Обработка сложных типов данных (изображения, массивы, …) Портирование под Linux Портирование под Linux –Протокол и traceint Внедрение в Python, Java Внедрение в Python, Java Разработка средств для отладки встраиваемых систем Разработка средств для отладки встраиваемых систем

Ссылки Сборка в Downloads. Репозиторий с исходным кодом – hg. Readme в каталоге readme и на странице Wiki. В readme рассказано о том, как подключить библиотеку, как ее использовать и как решить ряд стандартных проблем, связанных с использованием. Комментарии можно оставить в Issues. Сборка в Downloads. User Manual в архиве. Комментарии можно оставить в Issues.

Заключение… «Наш личный выбор стараться не использовать отладчики, кроме как для просмотра стека вызовов или же значений пары переменных. Одна из причин этого заключается в том, что очень легко потеряться в деталях сложных структур данных и путей исполнения программы. Мы считаем пошаговый проход по программе менее продуктивным, чем усиленные размышления и код, проверяющий сам себя в критических точках. Щёлканье по операторам занимает больше времени, чем просмотр сообщений операторов выдачи отладочной информации, расставленных в критических точках. Быстрее решить, куда поместить оператор отладочной выдачи, чем проходить шаг за шагом критические участки кода, даже предполагая, что мы знаем, где находятся такие участки. Более важно то, что отладочные операторы сохраняются в программе, а сессии отладчика переходящи. … «Отладка сложна и может занимать непредсказуемо долгое время, поэтому цель в том, чтобы миновать большую её часть. Технические приёмы, которые помогут уменьшить время отладки, включают хороший дизайн, хороший стиль, проверку граничных условий, проверку правильности исходных утверждений и разумности кода, защитное программирование, хорошо разработанные интерфейсы, ограниченное использование глобальных переменных, автоматические средства контроля и проверки. Грамм профилактики стоит тонны лечения.» Брайан Керниган и Роб Пайк Брайан Керниган и Роб Пайк