
Memoro: Детальный профилировщик кучи
Memoro — это высокодетализированный профилировщик кучи.
Memoro не только показывает, где и когда ваша программа выделяет память в куче, но и как ваша программа на самом деле использует эту память.
Memoro собирает подробную информацию об обращениях к куче, включая чтение и запись в память и время их выполнения, чтобы дать вам представление о том, насколько эффективно ваша программа использует память кучи.
Memoro включает в себя приложение-визуализатор, которое преобразует всю эту информацию в оценки и индикаторы, помогающие определить проблемные области.

Для получения более подробной информации о том, как работает Memoro, см. здесь
Ниже приведены шаги для быстрого начала работы с Memoro. Подробные инструкции по установке см. здесь. Руководство по использованию Memoro см. здесь.
Сначала вам нужно собрать локальную версию LLVM/Clang, чтобы можно было скомпилировать ваш код с инструментацией Memoro. Готовых сборок пока нет, но если достаточное количество людей попросит, возможно, я размещу их здесь.
Следуйте инструкциям по сборке LLVM/Clang здесь, но используйте указанные ниже репозитории. Memoro пока нет в ветке разработки LLVM/Clang.
Рекомендуется использовать зеркала git вместо SVN. Для основного репозитория LLVM, репозитория Clang и репозитория CompilerRT используйте версии Memoro:
В этих репозиториях по умолчанию должна быть ветка memoro_80.
Клонируйте этот репозиторий с помощью git clone [email protected]:epfl-vlsc/memoro.git
Перейдите в каталог.
$ cd memoro
Выполните npm install, чтобы убедиться, что все зависимости JavaScript присутствуют.
Затем вам нужно будет собрать дополнение для обработки данных на C++.
Для этого может потребоваться сначала установить node-gyp (npm install -g node-gyp).
Затем выполните:
cd cpp
node-gyp build --release --target=1.7.9 --arch=x64 --dist-url=https://atom.io/download/electron
cd ..
target — это версия Electron, которая должна соответствовать используемой для запуска основного приложения.
При необходимости откорректируйте это значение.
При необходимости измените arch, однако я еще не тестировал на системах, отличных от *nix x64.
Также есть Makefile, который должен подойти большинству пользователей.
Очевидно, для node-gyp требуется установленный компилятор C++.
Сначала соберите программу, которую хотите профилировать, с помощью собранного ранее LLVM/Clang.
Добавьте флаг компилятора -fsanitize=memoro для инструментации и, опционально, -fno-omit-frame-pointer для получения качественных стек-трейсов.
Если у вас есть отдельный этап компоновки, он также может потребовать -fsanitize=memoro, чтобы убедиться, что среда выполнения Memoro/Sanitizer связана.
Рекомендуется использовать символизатор LLVM для стек-трейсов: установите переменную окружения MEMORO_SYMBOLIZER_PATH, указывающую на расположение llvm-symbolizer.
Либо просто поместите его в PATH.
Запустите вашу программу. После завершения выполнения среда выполнения Memoro создаст два файла: *.trace и *.chunks. Их можно открыть и просмотреть с помощью визуализатора.
После сборки дополнения C++ приложение можно запустить непосредственно из каталога репозитория:
electron .
Файл->Открыть или Cmd/Ctrl-O, чтобы открыть, перейти и выбрать файл трассировки или фрагментов.
Удачной охоты за проблемами с кучей :-)
Используйте electron-packager, чтобы собрать и экспортировать весь код и ресурсы в пакет приложения.
electron-packager . --overwrite --platform=<platform> --arch=x64 --electron-version=1.7.9 --icon=assets/icons/icon64.icns --prune=true --out=release-builds
При необходимости снова откорректируйте платформу, архитектуру и версию Electron.
Вклад приветствуется. Пожалуйста, отправьте запрос на включение (pull request) или свяжитесь со мной.