/ / Traccia delle perdite di memoria con AppVerifier - c ++, perdite di memoria

Traccia della perdita di memoria con AppVerifier - c ++, perdite di memoria

Ho un'applicazione C ++ che ha un minimoperdite, e mi piacerebbe risolverli. Sto usando AppVerifier per scaricare gli oggetti persi, e posso ottenere gli indirizzi e i primi pochi byte della memoria allocata.

Sfortunatamente, quei primi byte e l'indirizzo grezzonon è sufficiente per individuare la traccia dello stack di allocazione, esiste un metodo per ottenere il dump completo dei dati di allocazione e trovare lo stack che assegna la memoria?

Potrei mettere _CrtSetBreakAlloc tramite il numero di perdita, ma sfortunatamente è un'applicazione filettata e quei numeri fluttuano su e giù.

Qualcuno ha un suggerimento su cosa potrei provare?

risposte:

3 per risposta № 1

Con l'utility gflags è possibile abilitare la memorizzazione delle informazioni sullo stack di chiamata (gflags + ust). Tuttavia, le tue applicazioni ora funzioneranno più lentamente e prenderanno più memoria.

Side-osservazione: Ad essere onesti, non ho mai ottenuto tutte quelle utility Microsoft (leak-tracing in C-RunTime, Gflags, UMDH, AppVerifier, LeakDiag) per fare esattamente quello che volevo. Alla fine, ho semplicemente scritto il mio allocatore di memoria in cui posso aggiungere qualsiasi traccia che voglio (chiamata stack, marcatura zona rossa, ritardo di liberazione, controllo di coerenza, ...).


1 per risposta № 2

Potresti provare a utilizzare UMDH per tenere traccia delle perdite di memoria. Per prima cosa devi utilizzare GFlags per attivare la memorizzazione della traccia dello stack di chiamate ogni volta che viene allocata memoria. I documenti su UMDH indicano come usarlo.

Ma recentemente ho finalmente provato il rilevatore di perdite visive, e funziona in modo favoloso sulla mia mostruosa, grande app. http://vld.codeplex.com