
Memoro: Un Profiler Dettagliato dell'Heap
Memoro è un profiler dell'heap estremamente dettagliato.
Memoro non solo ti mostra dove e quando il tuo programma effettua allocazioni nell'heap, ma ti mostrerà come il tuo programma ha effettivamente utilizzato quella memoria.
Memoro raccoglie informazioni dettagliate sugli accessi all'heap, inclusi letture e scritture in memoria e quando avvengono, per darti un'idea di quanto efficientemente il tuo programma utilizza la memoria dell'heap.
Memoro include un'applicazione visualizzatrice che distilla tutte queste informazioni in punteggi e indicatori per aiutarti a individuare le aree problematiche.

Per informazioni più dettagliate su come funziona Memoro, vedere qui
I passaggi seguenti delineano una guida rapida all'uso di Memoro. Per istruzioni dettagliate di configurazione, fare riferimento qui. Per una guida sull'uso di Memoro, fare riferimento qui.
Innanzitutto, dovrai compilare una versione locale di LLVM/Clang per poter compilare il tuo codice con la strumentazione Memoro. Le versioni precompilate non sono ancora disponibili, ma se abbastanza persone mi infastidiscono, forse le ospiterò qui.
Segui le istruzioni per la compilazione di LLVM/Clang qui, ma usa i repository specifici elencati di seguito. Memoro non è ancora nel ramo di sviluppo di LLVM/Clang.
Si consiglia di utilizzare i repository mirror git invece di SVN. Per il repository principale LLVM, il repository Clang e il repository CompilerRT, usa le versioni Memoro:
Questi repository dovrebbero avere come predefinito il ramo memoro_80.
Clona questo repository con git clone [email protected]:epfl-vlsc/memoro.git
Entra nella directory.
$ cd memoro
Esegui npm install per assicurarti che tutte le dipendenze JS siano presenti.
Dovrai quindi compilare l'addon di elaborazione dati in C++.
Per fare ciò, potresti aver bisogno di installare prima node-gyp (npm install -g node-gyp)
Poi,
cd cpp
node-gyp build --release --target=1.7.9 --arch=x64 --dist-url=https://atom.io/download/electron
cd ..
Il target è la versione di electon che deve corrispondere a quella utilizzata per eseguire l'app principale.
Regola questo se necessario.
Regola anche arch se necessario, tuttavia non ho ancora testato su sistemi non-*nix x64.
C'è anche un Makefile che dovrebbe funzionare per la maggior parte degli utenti.
Ovviamente, avrai bisogno di un compilatore C++ installato affinché node-gyp possa usarlo.
Innanzitutto, compila il software che vuoi profilare usando LLVM/Clang che hai compilato in precedenza.
Aggiungi il flag del compilatore -fsanitize=memoro per aggiungere la strumentazione e opzionalmente -fno-omit-frame-pointer per ottenere bei stack trace.
Se hai un passaggio di linking separato, anche questo potrebbe aver bisogno di -fsanitize=memoro per garantire che il runtime Memoro/Sanitizer sia collegato.
È consigliabile utilizzare il simbolizzatore LLVM per gli stack trace, imposta la variabile d'ambiente MEMORO_SYMBOLIZER_PATH per puntare a dove risiede llvm-symbolizer.
O semplicemente averlo nel tuo PATH.
Esegui il tuo programma. Al termine, il runtime di Memoro genererà due file, *.trace e *.chunks. Questi possono essere aperti e visualizzati usando il visualizzatore.
Dopo aver compilato l'addon C++, l'app può essere eseguita direttamente dalla directory del repository
electron .
File->Open o Cmd/Ctrl-O per aprire, naviga fino a e seleziona il file trace o chunk.
Buona caccia ai problemi di heap :-)
Usa electron-packager per raccogliere ed esportare tutto il codice e le risorse in un pacchetto applicativo.
electron-packager . --overwrite --platform=<platform> --arch=x64 --electron-version=1.7.9 --icon=assets/icons/icon64.icns --prune=true --out=release-builds
Ancora, regola la piattaforma, arch e la versione di electron se necessario.
I contributi sono più che benvenuti. Per favore invia una pull request o mettiti in contatto.