
Memoro: Um Profiler de Heap Detalhado
Memoro é um profiler de heap altamente detalhado.
Memoro não só mostra onde e quando seu programa faz alocações de heap, mas também mostra como seu programa realmente usou essa memória.
Memoro coleta informações detalhadas sobre acessos ao heap, incluindo leituras e escritas na memória e quando elas ocorrem, para dar a você uma ideia de quão eficientemente seu programa usa a memória do heap.
Memoro inclui um aplicativo visualizador que destila todas essas informações em pontuações e indicadores para ajudá-lo a identificar áreas problemáticas.

Para informações mais detalhadas sobre como Memoro funciona, veja aqui
As etapas abaixo descrevem um guia de início rápido para usar o Memoro. Para instruções detalhadas de configuração, consulte aqui. Para um guia sobre como usar o Memoro, consulte aqui.
Primeiro, você precisará construir uma versão local do LLVM/Clang para poder compilar seu código com a instrumentação do Memoro. Lançamentos pré-construídos ainda não estão disponíveis, mas se pessoas suficientes me encherem, talvez eu os hospede aqui.
Siga as instruções de construção do LLVM/Clang aqui, mas use os repositórios específicos listados abaixo. Memoro ainda não está no branch dev do LLVM/Clang.
É recomendado usar os repositórios espelho git em vez de SVN. Para o repositório principal do LLVM, o repositório Clang e o repositório CompilerRT, use as versões do Memoro:
Esses repositórios devem usar por padrão o branch memoro_80.
Clone este repositório com git clone [email protected]:epfl-vlsc/memoro.git
Entre no diretório.
$ cd memoro
Execute npm install para garantir que todas as dependências JS estejam presentes.
Você precisará então construir o addon de processamento de dados em C++.
Para isso, você pode precisar primeiro instalar o node-gyp (npm install -g node-gyp)
Então,
cd cpp
node-gyp build --release --target=1.7.9 --arch=x64 --dist-url=https://atom.io/download/electron
cd ..
O target é a versão do electron que deve corresponder à usada para executar o aplicativo principal.
Ajuste isso se precisar.
Ajuste também arch se precisar, no entanto, ainda não testei em sistemas x64 não-*nix.
Há também um Makefile que deve funcionar para a maioria dos usuários.
Obviamente, você precisará ter um compilador C++ instalado para o node-gyp usar.
Primeiro, construa o software que deseja perfilar usando o LLVM/Clang que você construiu anteriormente.
Adicione a flag do compilador -fsanitize=memoro para adicionar instrumentação e opcionalmente -fno-omit-frame-pointer para obter boas stack traces.
Se você tiver uma etapa de vinculação separada, ela também pode precisar de -fsanitize=memoro para garantir que o runtime do Memoro/Sanitizer seja vinculado.
É recomendado usar o symbolicador do LLVM para stack traces, defina a variável de ambiente MEMORO_SYMBOLIZER_PATH para apontar para onde llvm-symbolizer reside.
Ou apenas coloque-o no seu PATH.
Execute seu programa. Após a conclusão, o runtime do Memoro gerará dois arquivos, *.trace e *.chunks. Eles podem ser abertos e visualizados usando o visualizador.
Após construir o addon C++, o aplicativo pode ser executado diretamente do diretório do repositório
electron .
File->Open ou Cmd/Ctrl-O para abrir, navegue até e selecione o arquivo trace ou chunk.
Feliz caça a problemas de heap :-)
Use electron-packager para reunir e exportar todo o código e assets em um pacote de aplicativo.
electron-packager . --overwrite --platform=<platform> --arch=x64 --electron-version=1.7.9 --icon=assets/icons/icon64.icns --prune=true --out=release-builds
Novamente, ajuste a plataforma, arch e a versão do electron se necessário.
Contribuições são mais que bem-vindas. Por favor, envie um pull request ou entre em contato.