
Memoro: Un Profiler de Heap Detallado
Memoro es un perfilador de montón (heap) altamente detallado.
Memoro no solo te muestra dónde y cuándo tu programa realiza asignaciones de montón, sino que también te mostrará cómo tu programa realmente utilizó esa memoria.
Memoro recopila información detallada sobre los accesos al montón, incluyendo lecturas y escrituras en memoria y cuándo ocurren, para darte una idea de la eficiencia con la que tu programa utiliza la memoria del montón.
Memoro incluye una aplicación visualizadora que destila toda esta información en puntuaciones e indicadores para ayudarte a identificar áreas problemáticas.

Para obtener información más detallada sobre cómo funciona Memoro, consulta aquí
Los siguientes pasos describen una guía rápida para usar Memoro. Para instrucciones detalladas de configuración, consulta aquí. Para una guía sobre el uso de Memoro, consulta aquí.
Primero, necesitarás compilar una versión local de LLVM/Clang para poder compilar tu código con la instrumentación de Memoro. Aún no hay versiones precompiladas disponibles, pero si suficientes personas me molestan, quizás las aloje aquí.
Sigue las instrucciones de compilación de LLVM/Clang aquí, pero usando los repositorios específicos listados a continuación. Memoro aún no está en la rama de desarrollo de LLVM/Clang.
Se recomienda usar los repositorios espejo de git en lugar de SVN. Para el repositorio principal de LLVM, el repositorio de Clang y el repositorio de CompilerRT, usa las versiones de Memoro:
Estos repositorios deberían tener como rama predeterminada memoro_80.
Clona este repositorio con git clone [email protected]:epfl-vlsc/memoro.git
Entra al directorio.
$ cd memoro
Ejecuta npm install para asegurarte de que todas las dependencias de JS estén presentes.
Luego necesitarás compilar el complemento de procesamiento de datos en C++.
Para hacer esto, primero puedes necesitar instalar node-gyp (npm install -g node-gyp)
Luego,
cd cpp
node-gyp build --release --target=1.7.9 --arch=x64 --dist-url=https://atom.io/download/electron
cd ..
El target es la versión de Electron que debe coincidir con la utilizada para ejecutar la aplicación principal.
Ajústalo si es necesario.
También ajusta arch si es necesario, sin embargo, aún no lo he probado en sistemas x64 que no sean *nix.
También hay un Makefile que debería funcionar para la mayoría de los usuarios.
Obviamente, necesitarás tener un compilador de C++ instalado para que node-gyp lo use.
Primero, compila el software que deseas perfilar usando el LLVM/Clang que compilaste anteriormente.
Agrega la bandera del compilador -fsanitize=memoro para añadir instrumentación y opcionalmente -fno-omit-frame-pointer para obtener trazas de pila limpias.
Si tienes un paso de enlace separado, esto también puede necesitar -fsanitize=memoro para asegurar que el runtime de Memoro/Sanitizer esté enlazado.
Se recomienda usar el simbolizador de LLVM para las trazas de pila; establece la variable de entorno MEMORO_SYMBOLIZER_PATH para que apunte a donde reside llvm-symbolizer.
O simplemente tenlo en tu PATH.
Ejecuta tu programa. Al finalizar, el runtime de Memoro generará dos archivos, *.trace y *.chunks. Estos se pueden abrir y visualizar usando el visualizador.
Después de compilar el complemento C++, la aplicación se puede ejecutar directamente desde el directorio del repositorio
electron .
Archivo->Abrir o Cmd/Ctrl-O para abrir, navega y selecciona el archivo de traza o de chunks.
¡Feliz caza de problemas de montón! :-)
Usa electron-packager para recopilar y exportar todo el código y los recursos en un paquete de aplicación.
electron-packager . --overwrite --platform=<platform> --arch=x64 --electron-version=1.7.9 --icon=assets/icons/icon64.icns --prune=true --out=release-builds
Nuevamente, ajusta la plataforma, la arquitectura y la versión de Electron si es necesario.
Las contribuciones son más que bienvenidas. Por favor, envía un pull request o ponte en contacto.