Sto cercando di scovare un bug molto evasive in un software server che assomigliano a una perdita di memoria, ma memcheck non ha aiutato affatto. La mia ipotesi è che la memoria che è stata istanziata e mai rimossa non sia effettivamente trapelata, quindi c'è un riferimento ad essa, ma ora è inutile per il programma e dovrebbe essere rimossa. C'è uno strumento che può contare gli accessi, non i riferimenti, in memoria, e quindi dare una valutazione dell'uso effettivo degli oggetti nell'heap?lista aree di memoria "a freddo"
risposta
ho finito con la mia implementazione strumento. Il mio approccio era leggermente diverso da quello che intendevo: ho scritto un malloc hooking library. Aggancia malloc, realloc e free e mantiene un elenco di blocchi di memoria malloc'a viventi. Ogni volta che si invia un SIGUSR1 alla propria applicazione, esso scarica le informazioni in un file e lo valuta come un'espressione Mathematica. Il notebook Mathematica fornisce infine alcuni grafici molto utili: le istanze con punteggio migliore by call stack e una panoramica completa di calls to malloc. Con questi strumenti, dovevo semplicemente spostare il mio mouse sul punto più grasso e più distante dal punto verde centrale del secondo grafico, e, voilà, ho l'indirizzo che istanzia un sacco di memoria non trapelata ma inutile.
P.S. Le chiamate circolari che puoi vedere nel secondo grafico sono sicuramente un bug in backtrace() di libc.
Sono sorpreso che valgrind non abbia fatto quello che volevi, non c'è stata una perdita di memoria che valgrind non ha raccolto per me. – dreamlax
Questo bug è estremamente elusivo per un altro motivo: un altro ragazzo ha trovato un modo per attivarlo in modo affidabile nella sua build, ma quel metodo non funziona per il mio (la stessa fonte fresca e incontaminata, ovviamente). Quindi memcheck non ha trovato nulla di evidente per me, ma questo ragazzo mi ha detto che ha eseguito memcheck e non ha restituito nulla, e non ho motivo di pensare che abbia fatto qualcosa di sbagliato. Anche i dati mostrati nei grafici provengono dalla sua build. Sospetto che sia in qualche modo legato al bitness, costruisce un eseguibile a 32 bit per poter condividere la stessa build su qualsiasi server, mentre io ho creato solo eseguibili a 64 bit. –
Probabilmente questo strumento (Visual Leak Detector) vi aiuterà. È gratuito.
sembra un rilevatore di perdite normale, come ho detto il mio problema è che la memoria extra in uso non è tecnicamente trapelata, perché ci sono ancora riferimenti ad essa. Inoltre, sto lavorando con gcc. –
- 1. Ottimizzazione avvio a freddo
- 2. Prestazioni di avviamento a freddo WPF
- 3. Contro gli attacchi di avvio a freddo: come limitare le informazioni sensibili in Haskell
- 4. memoria di ricerca efficace nella lista suffisso
- 5. Aree portatili Vs Aree progetto multiple?
- 6. Scala - Converti Lista di liste in una singola Lista: Lista [Lista [A]] in Lista [A]
- 7. Aree di staging multiple
- 8. Ottieni aree associate a un progetto MVC
- 9. Script per caffè freddo con più callback
- 10. Linq lista di liste a lista singola
- 11. unire due aree di lavoro
- 12. Nella memoria 'lista appender' per log4j
- 13. Condividere aree di memoria tra operatori di sedano su una macchina
- 14. Aggiunta di aree a un'applicazione MVC: eventuali trucchi?
- 15. utilizzo di aree in MVC2
- 16. Come rilevare avvio a freddo o avvio a caldo su un processore ARM?
- 17. RedirectToAction tra aree?
- 18. Lista di liste a lista di tuple, riordinati
- 19. Controller divisi per aree
- 20. Lista di opzioni a scomparsa
- 21. Che cos'è il "tempo di avvio a freddo" del database AppEngine?
- 22. Complementi di riempimento di aree con matplotlib
- 23. Aggiunta di una lista a un'altra lista in java?
- 24. Come iterare su una lista di lista a Jinja
- 25. ASP.NET MVC4 Elenco di tutte le aree
- 26. RedirectToAction al di fuori delle aree
- 27. MarionetteJS: aree di applicazione e layout
- 28. Aree grigie dell'API di Google Maps V3
- 29. Append a inizio lista
- 30. Tesseract: specificare le aree di testo
Valgrind dovrebbe riferire roba che non è mai stato liberato come "ancora raggiungibile"; vedi http://valgrind.org/docs/manual/faq.html#faq.deflost. –
@oli: potresti pubblicare il tuo commento come risposta in modo che possa essere contrassegnato come accettato. Comunque, sembra la risposta giusta per me. – casualcoder
Ho già eseguito memcheck con questo programma e non ha mostrato nulla. –