¿Qué estrategia usas al rastrear un problema relacionado con la memoria? ¿Qué herramientas utiliza (tanto de código abierto como patentadas) para identificar pérdidas de memoria, daños en la memoria, etc. ¿Cómo rastrearía las pérdidas de memoria si solo gdb / dbx estuviera disponible en un sistema?
Para mí, arreglar las pérdidas de memoria con solo un depurador es muy difícil.
debugging
memory-leaks
Hemant
fuente
fuente
Respuestas:
Si puede cambiar el código fuente, Dmalloc es genial; enumerará qué punteros no fueron liberados y (para el código construido con símbolos de depuración) exactamente en qué línea se asignaron.
Si no puede, Valgrind es más o menos el estándar para ese tipo de cosas. En general, encuentro que Valgrind es algo más difícil de usar, pero tiene muchas más funciones y no implica agregar llamadas dmalloc a su código
fuente
Valgrind es increíblemente útil.
fuente
El macizo (de valgrind) es una de las mejores formas de encontrar pérdidas de memoria. Repita su código sospechoso (o ejecute su programa el tiempo suficiente) y descargue el resultado con ms_print. Por lo general, la pila de llamadas le brinda suficiente información para solucionarlo.
Con GDB, puede intentar conectarse a un programa en ejecución y llamar a funciones como
malloc_stats()
Si su programa está escrito en un idioma diferente, podría ser más complicado. Recientemente, algunos GDB han ganado capacidad de scriptabilidad, y la gente comenzó proyectos interesantes como gdb-heap , que puede analizar la memoria de Python desde un volcado del núcleo. Scripts de análisis de memoria similares podrían ser posibles para objetos C ++.
Lea también /programming/2564752/examining-cc-heap-memory-statistics-in-gdb
fuente
Para Solaris, hay varias herramientas enumeradas en las respuestas a esta pregunta de StackOverflow (incluyen la verificación de fugas con otras formas de mal acceso a la memoria).
fuente
He estado haciendo Objective-C durante algún tiempo, y hay un analizador que se ocupa de la administración de memoria de nivel C y cosas así. Clang Static Analyzer es tan bueno que Apple decidió agruparlo con su xCode IDE. No estoy seguro de si esto es bueno para su pregunta, pero si está haciendo C, entonces vale la pena intentarlo.
fuente