Семинар «Российские информационные технологии ответственного назначения» «Анализ и отладка программного обеспечения средствами QNX Momentics IDE» Игорь Рондарев, «СВД Встраиваемые Cистемы» QNX Momentics IDE ● Платформа Eclipse – ● CDT (C Development Toolkit) – ● модульность и расширяемость разрабатывается при непосредственном участии специалистов QSS QNX-ориентированные инструменты – информация о системе, создание загрузочных образов, профилирование и т.д. КОНФИГУРАЦИЯ СТЕНДА Инструментальная система Целевая система TCP/IP QNX® Momentics® IDE qconn ВСТРЕЧАЮЩИЕСЯ ПРОБЛЕМЫ ● ● Изолированные – Некорректная работа с точки зрения решаемой задачи (“2 + 2 = 5”; ошибки в алгоритмах) – Аварийное завершение работы (например, SIGSEGV вследствие ошибки доступа к памяти) Системные – ● Меняет своё поведение, когда попадает в окружение других приложений (DEADLINE) Смежные – Работает недостаточно эффективно (причиной может быть как недостаточная эффективность алгоритма, так и влияние других процессов, выполняющихся в системе) ИНСТРУМЕНТАРИЙ ● Отладчик (Debugger) ● Анализ памяти (Memory Analysis / Mudflap) ● Прикладное профилирование (Application Profiling) ● Анализ покрытия кода (Code Coverage) ● Системное профилирование (System Profiling) ● Инструменты общего назначения (Information) ОТЛАДЧИК (DEBUGGER) ● ● Пошаговая отладка приложения – с созданием нового процесса – с подключением к уже существующему процессу Анализ дампа приложения (application core dump) – – варианты использования ● создание аварийного дампа при досрочном завершении (т.н. crash dump) ● создание дампа работающего приложения системный инструмент “dumper” РАБОТА С ПАМЯТЬЮ: ТИПОВЫЕ ОШИБКИ ● Запись в уже освобождённый участок памяти (strcpy, malloc,..) – ● Чтение из неинициализированной области памяти – ● char *p, c; p = malloc(4); c = p[0]; free(p); “Висящие” указатели (“dangling pointers”) – ● char *p, a[] = "abc"; p = malloc(4); ········ free(p); ········ strcpy(p, a); char *p; {char c = 'a'; p = &c} ; printf(“%c”, *p); и т.д. QNX Memory Analysis ● ● ● Не требует пересборки приложения Функционал обеспечивается библиотекой librcheck.so, переопределяющей некоторые стандартные функции Режимы работы – Анализ “на лету” с помощью QNX Momentics IDE – Запись результатов анализа во временный файл для последующей обработки Mudflap ● Дополняет возможности инструмента QNX Memory Analysis ● Требует построения инструментированной версии приложения ● Режимы работы – Анализ “на лету” с помощью QNX Momentics IDE – Запись результатов анализа во временный файл для последующей обработки Code Coverage ● Позволяет обнаружить наличие неиспользуемых участков кода в программе (в частности, при написании тестов) ● Использует метрики компилятора gcc (gcov) ● Режимы работы – Анализ “на лету” с помощью QNX Momentics IDE – Запись результатов анализа во временный файл для последующей обработки ПРОМЕЖУТОЧНЫЙ РЕЗУЛЬТАТ Инструменты динамического анализа (Memory Analysis, Mudflap и Code Coverage): ● помогают исправлять труднообнаруживаемые ошибки ● позволяют повышать эффективность кода ● получать более компактные приложения – удаление неиспользуемых фрагментов кода (например, из библиотек) ПРОФИЛИРОВАНИЕ ПРИЛОЖЕНИЙ (APPLICATION PROFILING) ● ● ● Позволяет производить оценку временных характеристик работы приложения Несколько режимов сбора информации – Sampling – Sampling + Call Count – Function Instrumentation Управление профилированием – Средствами QNX Momentics IDE – Командный интерфейс (сигналы, переменные окружения) СИСТЕМНОЕ ПРОФИЛИРОВАНИЕ (SYSTEM PROFILING) ● Даёт возможность наблюдать за процессами взаимодействия компонентов системы (процессов и потоков) между собой ● Позволяет сохранять данные для последующего анализа ● Различные режимы использования – Интерактивный (QNX Momentics IDE + qconn) – Консольный (tracelogger) – Через программный интерфейс (TraceEvent() API) ИНСТРУМЕНТЫ ОБЩЕГО НАЗНАЧЕНИЯ ● System Information ● Process Information ● Malloc Information ● Connection Information Игорь Рондарев инженер-программист (812) 346-8956 [email protected] www.kpda.ru www.nautsilus.ru