
Memoroは非常に詳細なヒーププロファイラです。
Memoroは、プログラムがいつどこでヒープ割り当てを行ったかを示すだけでなく、プログラムがそのメモリを実際に どのように 使用したのかも表示します。
Memoroは、メモリへの読み取りや書き込み、それらがいつ発生したかなど、ヒープへのアクセスに関する詳細情報を収集し、プログラムがヒープメモリをどの程度効率的に使用しているかを把握する手助けをします。
Memoroには、このすべての情報をスコアとインジケータにまとめ、問題領域を特定するのに役立つビジュアライザアプリケーションが含まれています。

Memoroの動作に関する詳細については、こちらをご覧ください。
以下の手順は、Memoroを使用するためのクイックスタートガイドです。詳細なセットアップ手順はこちらを、Memoroの使用ガイドはこちらを参照してください。
まず、Memoroのインストルメンテーションを使用してコードをコンパイルできるように、ローカル版のLLVM/Clangをビルドする必要があります。プリビルドリリースはまだ利用できませんが、十分な数の人が私にせがめば、ここでホストするかもしれません。
LLVM/Clangのビルド手順はこちらに従ってください。ただし、以下にリストされている特定のリポジトリを使用してください。MemoroはまだLLVM/Clangの開発ブランチには含まれていません。
SVNの代わりにgitミラーリポジトリを使用することをお勧めします。メインの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も用意されています。
当然、node-gypを使用するにはC++コンパイラがインストールされている必要があります。
まず、先ほどビルドしたLLVM/Clangを使用して、プロファイリングしたいソフトウェアをビルドします。コンパイラフラグ-fsanitize=memoroを追加してインストルメンテーションを追加し、オプションで-fno-omit-frame-pointerを追加して適切なスタックトレースを取得します。別途リンク手順がある場合は、Memoro/Sanitizerランタイムがリンクされるように-fsanitize=memoroも必要になる場合があります。スタックトレースにはLLVMシンボライザを使用することをお勧めします。環境変数MEMORO_SYMBOLIZER_PATHを設定して、llvm-symbolizerの場所を指定してください。または、単にPATHに含めてください。
プログラムを実行します。完了後、Memoroランタイムは2つのファイル*.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のバージョンを調整してください。
コントリビューションを大歓迎します。プルリクエストを送信するか、お問い合わせください。