Анна Сергеева. Эффективное применение средств визуализации для анализа и отладки разрабатываемого программного обеспечения // Компоненты и технологии. 2016. № 11 (184). С. 115-118
В процессе отладки сложных компьютерных систем, инженеры-разработчики и проектировщики сталкиваются с необходимостью постоянно просматривать и анализировать большие объемы генерируемых лог-файлов.
В основном, принято при записи в лог снабжать разные виды событий характерными метками и затем находить и извлекать нужную для анализа информацию по этим меткам. Но сначала специалистам еще нужно определить, какого рода информация будет представлять интерес, а какая нет.
Для упрощения сбора и анализа отслеживаемых данных инженеры прибегают к помощи различных средств автоматизации и визуализации. В частности, у разработчиков низкоуровневого и прикладного программного обеспечения особой популярностью пользуются свободно распространяемые утилита преобразования данных из логов к удобному для восприятия виду vcdMaker и инструмент просмотра подготовленных данных GtkWave.
Опубликовано в разделе "Проектирование и моделирование"
Эта же статья на сайте журнала
Чем визуальный анализ лучше стандартного подхода
В большинстве случаев, для отладки приложений разработчики используют стандартный подход. Для разных видов событий в приложении создаются определенные метки. В момент обнаружения каждого такого конкретного события, данные о нем записываются в лог-файл вместе с соответствующей меткой. После завершения работы приложения, инженеры просматривают логи (по сути, это объемные текстовые файлы, каждая строка в котором соответствует определенному событию) и по меткам собирают информацию об интересующих событиях. На основе анализа этих данных, разработчики получают представление о поведении приложения, принимают решение о необходимости дальнейшей отладки и вырабатывают стратегию дополнительной доработки приложения [1].
Примем во внимание, что процесс отладки требует множества итераций. Каждый раз лог-файлы генерируются заново, и каждый раз изучение их содержимого придется повторять. Это потребует больших усилий разработчиков и займет значительную часть их времени[2] [3].
Для повышения эффективности отладки, существует весьма удобный подход. Текстовые лог-файлы специальным образом обрабатываются, так что инженеры могут отслеживать все события и изменения в приложении в графическом представлении. Такая визуализация делает процесс отладки более простым и эффективным.
В частности, можно прибегнуть к помощи двух удобных инструментов: vcdMaker и GtkWave.
Установка vcdMaker
vcdMaker — это свободно распространяемый инструмент преобразования стандартных лог-файлов к формату VCD (Value Change Dump), наиболее удобному для последующей визуализации.
Для установки, необходимо загрузить с официального сайта [4] инсталлятор и запустить его. Поддерживается создание журнала установки:
msiexec /i vcdMakerInstaller.msi /l*v vcdMakerInstallation.log
В процессе установки потребуется указать путь к директории, куда инсталлятор скопирует все необходимые файлы. Создается ярлык на рабочем столе и в системном программном меню. Обновляется значение переменной среды пользователя PATH, так что после установки vcdMaker можно запускать из любого места.
Содержимое исходных лог-файлов
Начнем с того, как выглядят исходные данные в логах.
Рассмотрим наглядный пример. В частности, в директории установки vcdMaker можно найти подкаталог sample с файлом примера example.txt. Он состоит из набора нескольких сигналов и их значений, меняющихся во времени случайным образом.
...
#77655698 FRDM.Sensors.Magnetometer.MagY 873 32
#77655817 FRDM.Sensors.Magnetometer.MagZ 3126 32
#77756251 FRDM.Buttons.SW1 1 1 Key pressed
#77805674 FRDM.Sensors.Magnetometer.MagX 64955 32
#77805797 FRDM.Sensors.Magnetometer.MagY 853 32
#77805916 FRDM.Sensors.Magnetometer.MagZ 3191 32
#77806061 FRDM.Sensors.Slider 99 7
#77808473 FRDM.Sensors.Accelerometer.AccX 0.538574 f
#77808473 FRDM.Sensors.Accelerometer.AccY 0.172852 f
#77808473 FRDM.Sensors.Accelerometer.AccZ 0.706543 f
...
В общем случае, каждая строка этого файла имеет следующий формат:
#Временная_Метка Уровень1...УровеньX.Имя_Сигнала Значение_Сигнала [размерность | f] Комментарий
Здесь используются обозначения:
Временная_Метка (Time Stamp) — момент времени изменения сигнала. Поскольку для сбора данных о событиях от нескольких источников в отлаживаемой системе может использоваться одно устройство (пример — UART), то записи в файле могут быть не упорядочены. Другими словами, записи с меньшими значениями временных меток могут оказаться в логе после записей с большими значениями временных меток. Это не имеет существенного значения, поскольку при создании VCD-файла все события будут переупорядочены корректно.
Уровень и Имя_Сигнала – Вложенная структура, которая описывает иерархический путь к сигналу или переменной. Эту иерархию можно представить в виде дерева (рис. 1).
Рис. 1. Иерархия сигналов и переменных в отлаживаемой системе.
В такой системе определены всего четыре переменные, которые можно описать следующим образом:
Базовый_Модуль.Модуль _1.Переменная _1
Базовый_Модуль.Модуль _1.Переменная _2
Базовый_Модуль.Модуль _2.Переменная _1
Базовый_Модуль.Модуль _2.Переменная _2
Значение_Сигнала – значение сигнала в формате целого или вещественного числа (представлено в виде %f printf() ).
[ размерность | f] – После описания иерархии сигнала для целочисленных сигналов указывается размерность их значения в битах, а для значений сигналов, представленных в формате вещественных чисел, указывается флаг f.
Комментарий – опциональное пояснение, в котором пользователь может указать произвольную текстовую строку.
Генерирование VCD из лог-файлов в vcdMaker
Для генерирования VCD-файла из исходного лог-файла описанного формата, используется команда с синтаксисом:
vcdMaker -f имя_лог_файла -o имя_vcd_файла.vcd -t единицы_измерения_времени [-v]
Здесь:
имя_лог_файла – Имя исходного лог-файла.
имя_vcd_файла – Имя создаваемого VCD-файла.
единицы_измерения_времени – Единицы измерения времени, используемые для записи сэмплов. Допустимые значения: s, ms, us, ns, ps, fs (с, мс, мкс, нс, пс, фс соответственно).
-v – опциональный ключ для включения подробного (verbose) режима, когда vcdMaker будет передавать на выход все строки лога, включая даже не соответствующие требуемому формату. Разработчики vcdMaker настоятельно рекомендуют включение этого режима на начальных стадиях работы с утилитой.
Для проведения практического эксперимента, нужно скопировать упомянутый ранее файл sample\example.txt в локальную рабочую директорию пользователя. Преобразование текстового файла в формат VCD выполняется с помощью следующей команды:
vcdMaker -f example.txt -o output.vcd -t us
Инструмент vcdMaker выполнит разбор (парсинг) исходного файла example.txt и создаст на его базе новый файл output.vcd, полностью готовый к визуализации.
Далее в статье приводится описание возможности просмотра файлов формата VCD и анализа их содержимого с помощью программы GtkWave.
Просмотр VCD-файлов в GtkWave
На рынке представлен целый ряд приложений, позволяющих RTL-проектировщикам и разработчикам просматривать файлы формата Value Change Dumb. Хотя большинство из них предназначены для коммерческого использования, есть и бесплатные аналоги, такие как GtkWave [5].
Помимо того, что GtkWave является свободно распространяемым, он занимает мало места и расходует мало ресурсов, прост в использовании и предоставляет все необходимые для работы функциональные возможности. Ознакомимся с основными.
В результате обработки лог-файла в vcdMaker мы уже получили подходящий файл output.vcd, с ним и будем работать. Откроем его через главное меню GtkWave (команда меню File -> Open) или просто перетащим иконку файла в основное окно консоли.
Кроме главного меню и панели инструментов, отображается панель дерева сигналов, доступных для выбора (Signal Search Tree, SST), панель сигналов, выбранных для отслеживания (Signals) и основная панель графического отображения изменений сигналов (Waves).
Добавим доступные сигналы в список отслеживаемых.
В верхней части панели SST развернем ветку элементов управления FRDM и выберем блок Buttons (кнопки). Удерживая на клавиатуре клавишу 'Ctrl', в нижней части панели SST выберем переключатели SW1 и SW3 (рис. 2). С помощью кнопки Append добавим переключатели в список сигналов.
Рис. 2. Добавление переключателей в список отслеживаемых сигналов.
Кнопки добавили, теперь добавим сенсоры. В верхней части панели SST перейдем к ветке Sensors (сенсоры). Удерживая клавишу 'Ctrl', в нижней части панели SST выберем индикатор Light и слайдер Slider (рис. 3). С помощью кнопки Append добавим сенсоры в список отслеживаемых сигналов.
Рис. 3. Добавление сенсоров в список отслеживаемых сигналов.
Теперь, на панели SST развернем ветку Sensors и выберем, например, акселерометр Accelerometer. Как видно из рис. 4, можно отслеживать ускорение по осям x, y и z. Выберем один из вариантов, скажем, AccX, и по кнопке Append добавим его в список сигналов.
Рис. 4. Добавление акселерометра в список отслеживаемых сигналов.
Для удобства просмотра, в программе поддерживается изменение масштаба (Zoom In/Out – значки лупы на панели инструментов), а также поиск переключения выбранных сигналов (Find Next/Previuos Edge — зеленые стрелки вправо/влево на панели инструментов). Например, на рис. 5 показан поиск очередного спада сигнала SW3.
Рис. 5. Результат поиска очередного переключения сигнала SW3.
В GtkWave реализована удобная возможность точного измерения времени между двумя зарегистрированными событиями.
Например, нужно измерить длительность очередного импульса SW3. На диаграмме в основной панели Waves по клику мыши выберем начало импульса и, удерживая клавишу 'b' на клавиатуре, выберем спад сигнала. На панели инструментов в поле Marker отобразится точная длительность сохранения импульса в 142.712 мс (рис. 6).
Рис. 6. Измерение длительности импульса SW3.
Среди сигналов, которые мы добавили в список отслеживаемых, есть два аналоговых: Slider и AccX. Можно просматривать значения таких сигналов в режиме интерполяции.
Для этого, в контекстном меню слайдера Slider или акселерометра AccX (по правой кнопки мыши) нужно выбрать команду Data Format -> Analog -> Interpolated (см. рис. 7).
Рис. 7. Настройка отображения значений аналоговых сигналов в режиме интерполяции.
Чтобы получить еще более точные результаты по аналоговым сигналам, можно менять масштаб временной шкалы, а также увеличивать и высоту строки (команда Insert Analog Height Extension контекстного меню, рис. 8).
Рис. 8. Вертикальное масштабирование значений аналоговых сигналов.
В результате такой настройки, значения сигналов разных типов наглядно отслеживаются во времени (рис. 9).
Рис. 9. Наглядное отслеживание значений сигналов разных типов во времени.
Заключение
На этапе отладки разрабатываемых программных приложений очень важно сделать грамотный выбор подходов для отслеживания событий, формирования логов, извлечения из них данных и последующего анализа.
Применение средств визуализации избавляет специалистов от необходимости многократного просмотра огромного числа текстовых файлов и кропотливой обработки данных из них. Вместо этого, используя такие инструменты как vcdMaker и GtkWave, разработчики могут оценивать текущее поведение отлаживаемого приложения визуально, сразу по всем интересующим сигналам на одном экране.
Этот наглядный и удобный способ анализа информации позволяет инженерам минимизировать время отладки, оперативно принимать решения по доработке кода и получать более качественный готовый продукт в наиболее сжатые сроки.
Литература
[1] А.Сергеева. Эффективные возможности повышения качества разработки программных приложений //Системный администратор. 2015. № 10. c. 54-57.
[2] А.Сергеева. Применение реинжиниринга при проектировании встраиваемых систем. Часть 1 // Компоненты и технологии. 2014. № 9. C. 101-106.
[3] А.Сергеева. Применение реинжиниринга при проектировании встраиваемых систем. Часть 2 // Компоненты и технологии. 2014. № 10. С. 125-128.
[4] http://vcdmaker.org/
[5] http://gtkwave.sourceforge.net/