All Projects → epfl-vlsc → Memoro

epfl-vlsc / Memoro

Licence: mit
Memoro: A Detailed Heap Profiler

Projects that are alternatives of or similar to Memoro

Remotery
Single C file, Realtime CPU/GPU Profiler with Remote Web Viewer
Stars: ✭ 1,908 (+1100%)
Mutual labels:  profiler
Lagmonitor
Monitor performance of your Minecraft server. Similar to VisualVM and Java Mission Control.
Stars: ✭ 147 (-7.55%)
Mutual labels:  heap
Similarimagehunter
Mac 上寻找相似内容的图片工具
Stars: ✭ 155 (-2.52%)
Mutual labels:  tools
Rxtool
Android开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j压缩(支持分卷压缩与加密) | 一键集成UCrop选择圆形头像 | 一键集成二维码和条形码的扫描与生成 | 常用Dialog | WebView的封装可播放视频 | 仿斗鱼滑动验证码 | Toast封装 | 震动 | GPS | Location定位 | 图片缩放 | Exif 图片添加地理位置信息(经纬度) | 蛛网等级 | 颜色选择器 | ArcGis | VTPK | 编译运行一下说不定会找到惊喜
Stars: ✭ 11,567 (+7174.84%)
Mutual labels:  tools
Awesome Http Benchmark
HTTP(S) benchmark tools, testing/debugging, & restAPI (RESTful)
Stars: ✭ 2,236 (+1306.29%)
Mutual labels:  tools
Vscode Powertools
A swiss army knife with lots of tools, extensions and (scriptable) enhancements for Visual Studio Code.
Stars: ✭ 150 (-5.66%)
Mutual labels:  tools
Profiler Pack
A Symfony Pack for Symfony profiler
Stars: ✭ 1,745 (+997.48%)
Mutual labels:  profiler
Gophertunnel
Toolbox for Minecraft software written in Go
Stars: ✭ 156 (-1.89%)
Mutual labels:  tools
Web Profiler Bundle
The WebProfilerBundle provides detailed technical information about each request execution and displays it in both the web debug toolbar and the profiler.
Stars: ✭ 1,905 (+1098.11%)
Mutual labels:  profiler
Extratools
145+ extra higher-level functional tools beyond standard library's `itertools`, `functools`, etc. and popular third-party libraries like `toolz`.
Stars: ✭ 155 (-2.52%)
Mutual labels:  tools
Vscode Gist
vscode extension for quick gists
Stars: ✭ 146 (-8.18%)
Mutual labels:  tools
Stuff
Unsorted, raw, ugly & probably poorly usable tools for reversing, exploit and pentest
Stars: ✭ 146 (-8.18%)
Mutual labels:  tools
Neural Tools
Tools made for usage alongside artistic style transfer projects
Stars: ✭ 150 (-5.66%)
Mutual labels:  tools
Mc
MinIO Client is a replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage.
Stars: ✭ 1,962 (+1133.96%)
Mutual labels:  tools
E Tools
A toolbox for developers. Color picker, code formatter, and more.
Stars: ✭ 156 (-1.89%)
Mutual labels:  tools
Awesome
A collection of awesome Statamic articles, links, resources and other rad things.
Stars: ✭ 144 (-9.43%)
Mutual labels:  tools
Awesome Cae
A curated list of awesome CAE frameworks, libraries and software.
Stars: ✭ 148 (-6.92%)
Mutual labels:  tools
Slack Watchman
Monitoring your Slack workspaces for sensitive information
Stars: ✭ 159 (+0%)
Mutual labels:  tools
Visualvm
VisualVM is an All-in-One Java Troubleshooting Tool
Stars: ✭ 2,084 (+1210.69%)
Mutual labels:  profiler
Awesome Web You Should Know
🌎awesome web you should know
Stars: ✭ 154 (-3.14%)
Mutual labels:  tools

Memoro

Memoro is a highly detailed heap profiler.

Memoro not only shows you where and when your program makes heap allocations, but will show you how your program actually used that memory.

Memoro collects detailed information on accesses to the heap, including reads and writes to memory and when they happen, to give you an idea of how efficiently your program uses heap memory.

Memoro includes a visualizer application that distills all this information into scores and indicators to help you pinpoint problem areas.

alt text

For more detailed information about how Memoro works, see here

Build & Install

The below steps outline a quick-start guide to using Memoro. For detailed set-up instructions refer to here. For a guide on using Memoro, refer here.

Building the Instrumented compiler

First, you will need to build a local version of LLVM/Clang so you can compile your code with Memoro instrumentation. Pre-built releases are not yet available, but if enough people bug me perhaps I will host here.

Follow the LLVM/Clang build instructions here, but use the specific repositories listed below. Memoro is not yet in the LLVM/Clang dev branch.

It's recommended to use the git mirror repositories instead of SVN. For the main LLVM repo, the Clang repo, and the CompilerRT repo, use the Memoro versions:

LLVM

Clang

CompilerRT

These repos should default to branch memoro_80.

Building the Visusalizer C++ lib

Clone this repo with git clone [email protected]:epfl-vlsc/memoro.git

Enter the directory.

$ cd memoro

Run npm install to make sure all JS dependencies are present. You will then need to build the C++ data processing addon. To do this, you may first need to install node-gyp (npm install -g node-gyp) Then,

cd cpp
node-gyp build --release --target=1.7.9 --arch=x64 --dist-url=https://atom.io/download/electron
cd ..

The target is the electon version that must match that used to run the main app. Adjust this if you need. Also adjust arch if you need, however I have not yet tested on non-*nix x64 systems. There is a Makefile as well that should work for most users.

Obviously, you will need a C++ compiler installed for node-gyp to use.

Running

Instrument and Run your Software

First, build the software you want to profile using the LLVM/Clang you have built earlier. Add the compiler flag -fsanitize=memoro to add instrumentation and optionally -fno-omit-frame-pointer to get nice stack traces. If you have a separate linking step, this may also need -fsanitize=memoro to ensure the Memoro/Sanitizer runtime is linked. It is recommended to use the LLVM symbolizer for stack traces, set env variable MEMORO_SYMBOLIZER_PATH to point to where llvm-symbolizer resides. Or just have it in your PATH.

Run your program. After completion, the Memoro runtime will generate two files, *.trace and *.chunks. These can be opened and viewed using the visualizer.

Use the Memoro Visualizer

After building the C++ addon, the app can be run directly from the repo directory

electron .

File->Open or Cmd/Ctrl-O to open, navigate to and select either the trace or chunk file.

Happy hunting for heap problems :-)

Installing the Visualizer

Use electron-packager to gather and export all code and assets into an application package.

electron-packager . --overwrite --platform=<platform> --arch=x64 --electron-version=1.7.9 --icon=assets/icons/icon64.icns --prune=true --out=release-builds

Again, adjust the platform, arch, and electron version if necessary.

Contributing

Contributions are more than welcome. Please submit a pull request or get in touch.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].