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 以确保所有 JS 依赖都存在。
然后你需要构建 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 适用于大多数用户。
显然,你需要安装一个 C++ 编译器供 node-gyp 使用。
首先,使用之前构建的 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 打开,导航并选择 trace 或 chunk 文件。
祝你愉快地查找堆问题 :-)
使用 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 版本。
非常欢迎贡献。 请提交拉取请求或联系我。