Документация
ОС Аврора 5.1.5

Выявление утечек памяти с помощью Memcheck

Для выявления проблем, связанных с управлением памятью, можно использовать утилиту Memcheck, которая включена в набор инструментов профилирования Valgrind.

Сейчас профилирование работает только на эмуляторе. Для профилирования эмулятору рекомендуется выделять не менее 4 гигабайт оперативной памяти.

Установка зависимостей

Установка инструмента Valgrind, включающего в себя утилиту Memcheck, выполняется на эмулятор. Для установки требуется подключиться по ssh к эмулятору и установить пакеты valgrind и valgrind-extratools.

Команды для установки:

devel-su pkcon install valgrind
devel-su pkcon install valgrind-extratools

Предварительная настройка проекта

Чтобы во время сборки в режиме Профилирования не было ошибок и debug-файлы попадали на эмулятор, можно их явно включить в rpm-пакеты в секции %files в spec-файле:

%{_bindir}/%{name}.debug

Либо включить всю папку /usr/bin:

%{_bindir}

Примечание. После завершения профилирования перед запуском приложения в эксплуатацию данные параметры следует исключить из spec-файла.

Профилирование приложения

Для профилирования приложения следует выполнить следующие шаги:

  1. Выбрать тип сборки Профилирование.

  2. Переключить Аврора IDE в режим Проекты.

  3. Выбрать пункт Запуск для таргета.

  4. В разделе Запуск в выпадающем списке Конфигурация запуска добавить конфигурацию ru.auroraos.TestAppName (on %{Device:Name}). Где ru.auroraos.TestAppName — имя приложения, которое нужно протестировать. Данная конфигурация приложения в указанных в данном пункте параметрах совпадает с конфигурацией по умолчанию, тем не менее рекомендуется создать новую, чтобы можно было легко переключаться между обычным запуском приложения и запуском в режиме профилирования.

  5. Активировать поле Сменить программу на устройстве с помощью галочки и и указать valgrind в поле Использовать эту команду .

  6. В поле Параметры командной строки указать параметры:

    --leak-check=full --xml=yes --xml-file=result.xml ru.auroraos.TestApp
    

    Описание параметров:

    • Значение ru.auroraos.TestApp — название приложения, которое указано в поле Name в файле .spec.
    • Параметр --xml=yes включает сохранение результатов профилирования в .xml-файл.
    • Параметр --xml-file=result.xml указывает имя файла, в который нужно сохранить результат.
    • Параметр --leak-check=full включает предоставление подробной информации о каждом определённо потерянном или возможно потерянном блоке памяти.

    В этом же поле можно настроить работу профайлера с помощью других параметров:

    • --leak-resolution=<low|med|high> определяет, как можно объединить несколько утечек в один общий отчёт;
    • --show-leak-kinds=<set> определяет типы искомых утечек;
    • --errors-for-leak-kinds=<set> указывает виды утечек, которые следует считать ошибками;
    • --leak-check-heuristics=<set> указывает набор эвристик для проверки утечек;
    • --show-reachable=<yes|no>, --show-possibly-lost=<yes|no> являются альтернативами предыдущим параметрам;
    • --xtree-leak=<no|yes>, --xtree-leak-file=<filename> включает вывод результатов в формате дерева, и если да, то в какой файл;
    • --undef-value-errors=<yes|no> определяет, будет или нет сообщение об использовании ошибок неопределённого значения;
    • --track-origins=<yes|no> определяет, отслеживается или нет происхождение неинициализированных значений;
    • --partial-loads-ok=<yes|no> управляет тем, как Memcheck обрабатывает 32-, 64-, 128- и 256-битные загрузки с естественным выравниванием с адресов, для которых одни байты адресуются, а другие нет;
    • --expensive-definedness-checks=<no|auto|yes> определяет, следует ли использовать более точные, но и более затратные по времени инструменты при проверке конкретных значений;
    • --keep-stacktraces=alloc|free|alloc-and-free|alloc-then-free|none управляет тем, какие трассировки стека следует сохранять для блоков malloc и/или free.
    • --freelist-vol=<number> указывает в байтах максимальный общий размер блоков в очереди на очистку памяти;
    • --freelist-big-blocks=<number> указывает, что при очистке памяти в приоритете следует перераспределять блоки с размером, большим или равным number;
    • --ignore-range-below-sp=<number>-<number> указывает, что не нужно сообщать об ошибках доступа по указанным смещениям ниже указателя стека;
    • --show-mismatched-frees=<yes|no> проверяет, освобождаются или нет блоки кучи с помощью функции, которая соответствует функции выделения;
    • --ignore-ranges=0xPP-0xQQ[,0xRR-0xSS] указывает, какие диапазоны адресов игнорировать;
    • --malloc-fill=<hexnumber> заполняет блоки, выделенные malloc, new и т. д., но не calloc, указанным байтом;
    • --free-fill=<hexnumber> заполняет блоки, освобожденные free, delete и т. д., указанным значением байта.

    Подробнее о параметрах можно прочитать в официальной документации по инструменту Memcheck.

  7. Запустить приложение из IDE в режиме профилирования с помощью кнопки запуска приложения.

    Выполнить в приложении задуманный сценарий и завершить работу приложения. Производительность приложения во время профилирования, как правило, существенно снижается. По окончании работы приложения профайлер создаст в домашней директории файл с результатами профилирования. Имя файла соответствует значению, указанному в параметре --xml-file .

Для переноса файла с результатами следует выполнить на компьютере разработчика команду, аналогичную приведённой ниже.

Для эмулятора:

scp -P 2223 -i ~/AuroraOS/vmshare/ssh/private_keys/sdk defaultuser@localhost:result.xml /path/to/local/place

где scp — утилита, позволяющая копировать файлы с удалённого ресурса. Команда в данной инструкции приводится для Unix-совместимого терминала. В Linux и macOS можно использовать стандартный терминал, в Windows необходимо использовать Git Bash.

Просмотр результатов

Перед просмотром результатов профилирования необходимо перенести .xml-файл с результатом с эмулятора в систему разработчика, где ведётся работа над проектом (см. шаг 7 Профилирование приложения).

Чтобы посмотреть результаты, необходимо:

  1. Переключить IDE в режим Отладка.
  2. Выбрать Memcheck в выпадающем списке панели отладки.
  3. Нажать на и выбрать .xml-файл с результатом.

Примечание. Из-за неполной совместимости инструмента Memcheck с ОС Windows все найденные профайлером утечки памяти записываются во Внешние ошибки, где не поддерживается открытие файлов в редакторе при навигации. Однако в области просмотра результатов указываются имена файлов и номера строк кода с ошибкой, поэтому файл с ошибкой можно открыть вручную.

Фильтр Внешние ошибки по умолчанию выключен. Чтобы его включить, нужно нажать на значок фильтра и в выпадающем списке поставить галочку напротив пункта Внешние ошибки.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.